我有下面的 link_to 标签,我很好奇创建此链接的最佳方法是什么,并检查 first_name 和 last_name 是否为零?
如果只有一个名字是 nil(第一个或最后一个),我仍然想要一个链接。
<%= link_to "#{u.user_details.first_name+" "+u.user_details.last_name}", profile_path(u), :class => 'name' %>
我有下面的 link_to 标签,我很好奇创建此链接的最佳方法是什么,并检查 first_name 和 last_name 是否为零?
如果只有一个名字是 nil(第一个或最后一个),我仍然想要一个链接。
<%= link_to "#{u.user_details.first_name+" "+u.user_details.last_name}", profile_path(u), :class => 'name' %>
实现这一目标的一种干净方法是
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'
如果条件不满足,则返回参数,并且您不需要它,因为它将是一个空字符串。
根据我的口味,视图中有太多代码。我更喜欢使用模型和助手:
# 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 %>
您可以像这样使用锚字符串:"#{[u.user_details.first_name, u.user_details.last_name].join(' ')}"
.
先看看#join
效果如何。
这个解决方案的缺点是即使没有提供用户详细信息也会创建链接,但它会有空的锚字符串。
一种工作方法是:
<%= 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? %>
但我不确定这是最好的方法......
迅速地:
<%= 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' %>
我还会检查它们是否为空白并使用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? %>