Rails 3组合两个变量

AnA*_*ice 6 ruby-on-rails ruby-on-rails-3

我有以下代码需要更新...

<% @users.each do |user| %>
  <tr>
    <td><%= link_to user.fname, user %></td>
  </tr>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我想学习如何更新它,而不是只显示fname,它显示fname + lname

所以对于詹姆斯·邦德这样的唱片,它会显示詹姆斯·邦德并将其链接到Rails中的用户.

谢谢

And*_*Vit 18

您可以在ERB中加入字符串:

<%= link_to user.fname + " " + user.lname, user %>
<!-- or, slightly better: avoids problems with nil values -->
<%= link_to "#{user.fname} #{user.lname}", user %>
<!-- or, even better -->
<%= link_to [user.fname, user.lname].join(" "), user %>
Run Code Online (Sandbox Code Playgroud)

或者,您可以将丑陋的逻辑移动到辅助方法中,例如在app/helpers/users_helper.rb中:

module UsersHelper
  def full_name(user)
    [user.fname, user.lname].join(" ")
  end
end

<%= link_to full_name(user), user %>
Run Code Online (Sandbox Code Playgroud)

或者,(这就是我要做的)你可以在模型中放置一个full_name方法:

class User < ActiveRecord::Base
  def full_name
    [fname, lname].join(" ")
  end
end

<%= link_to user.full_name, user %>
Run Code Online (Sandbox Code Playgroud)

  • 有些人认为像这样的逻辑对于模型来说太"表现"了,而应该是一个视图助手.最终由您来决定最有用的地方:我在模型中放了很多"标准"表示方法.提出像"史蒂夫未知"这样的名字对我来说似乎很奇怪,像这样的奇怪("非标准")演示文稿可能应该采用辅助方法而不是模型.但是,这取决于你. (2认同)