0

我有下面的 link_to 标签,我很好奇创建此链接的​​最佳方法是什么,并检查 first_name 和 last_name 是否为零?

如果只有一个名字是 nil(第一个或最后一个),我仍然想要一个链接。

<%= link_to "#{u.user_details.first_name+" "+u.user_details.last_name}", profile_path(u), :class => 'name' %>
4

6 回答 6

4

实现这一目标的一种干净方法是

class UserDetails
  def full_name
    [self.first_name,
     self.last_name].compact.join(' ')
  end
end

然后,在控制器中

<%= link_to(u.user_details.full_name,
            profile_path(u),
            :class => 'name') if u.user_details.full_name.present? %>

使用link_to_if'name'如果条件不满足,则返回参数,并且您不需要它,因为它将是一个空字符串。

于 2012-11-20T07:35:52.573 回答
1

根据我的口味,视图中有太多代码。我更喜欢使用模型和助手:

# user_details.rb
def full_name
  "#{first_name} {last_name}"
end

# helper.rb
def my_link_to(user)
  name = user.user_details.full_name
  return "" if name.blank?
  link_to name, profile_path(user), :class => 'name'  
end

# view.erb
<%= my_link_to user %>
于 2012-11-20T13:09:29.637 回答
0

您可以像这样使用锚字符串:"#{[u.user_details.first_name, u.user_details.last_name].join(' ')}".

先看看#join效果如何。

这个解决方案的缺点是即使没有提供用户详细信息也会创建链接,但它会有空的锚字符串。

于 2012-11-20T07:21:42.307 回答
0

一种工作方法是:

<%= link_to "#{u.user_details.first_name+" "+u.user_details.last_name}", profile_path(u), :class => 'name' if u.user_details.first_name.blank? or u.user_details.last_name.blank?  %>

但我不确定这是最好的方法......

于 2012-11-20T07:24:50.067 回答
0

迅速地:

<%= link_to_if u.user_details.first_name || u.user_details.last_name,
[u.user_details.first_name, u.user_details.last_name].compact.join(' '),
profile_path(u), :class => 'name' %>

但是,我可能会将其重构为:

<% a = [u.user_details.first_name, u.user_details.last_name].compact %>
<%= link_to_unless a.empty?, a.join(' '), profile_path(u), class: 'name' %>
于 2012-11-20T07:35:28.043 回答
0

我还会检查它们是否为空白并使用join

<% name = [u.user_details.first_name, u.user_details.last_name].reject(&:blank?).join(" ") %>
<%= link_to name, profile_path(u), :class => 'name' unless name.blank? %>
于 2012-11-20T07:45:22.147 回答