以下にlink_toタグがありますが、このリンクを作成し、first_nameとlast_nameがnilであるかどうかを確認するのが最善の方法について知りたいのですが。
名前の1つだけが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であるかどうかを確認するのが最善の方法について知りたいのですが。
名前の1つだけが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 %>
素早く:
<%= 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' %>
作業方法は次のとおりです。
<%= 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? %>
しかし、これが最善の方法であるかどうかはわかりません...
また、それらが空白ではないことを確認し、次を使用します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? %>
次のようなアンカー文字列を使用できます"#{[u.user_details.first_name, u.user_details.last_name].join(' ')}"
。
最初にどのように機能するかを確認してください#join
。
このソリューションの欠点は、ユーザーの詳細が提供されていなくてもリンクが作成されることですが、アンカー文字列が空になります。