0

以下に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' %>
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

素早く:

<%= 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

作業方法は次のとおりです。

<%= 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

また、それらが空白ではないことを確認し、次を使用します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 に答える
0

次のようなアンカー文字列を使用できます"#{[u.user_details.first_name, u.user_details.last_name].join(' ')}"

最初にどのように機能するかを確認してください#join

このソリューションの欠点は、ユーザーの詳細が提供されていなくてもリンクが作成されることですが、アンカー文字列が空になります。

于 2012-11-20T07:21:42.307 に答える