当我使用此代码生成输出时:
<h3>
<% @partner.employees.each do |s| %>
<%= "#{s.forename} #{s.lastname} " %>
<% end %>
<%= " ..." %></h3>
这例如产生了这个输出:
Josef Smith Daniel Crak ....
我的问题是我试图获得此输出:
Josef Smith, Daniel Crak ....
我尝试过类似的东西:
@partner.employees.all.map(:forname, :lastname)
但是这产生了这个错误:
wrong number of arguments (2 for 0)
我希望有人可以帮我找一个简短的解决方案!感谢
答案 0 :(得分:4)
你可能想要像
这样的东西 @partner.employees.map { |s| "#{s.forename} #{s.lastname} " }.join(',')
答案 1 :(得分:1)
这是一种方式:
<% @partner.employees.each do |s| %>
<%= %i(forename lastname).map{|m| s.send(m)}.join(" ") + "," %>
<% end %>
答案 2 :(得分:1)
仅供将来参考,这是正在发生的事情。
map
只接受一个参数,一个块。如果你只需要调用一个没有参数的方法,你可以使用&符号前面的符号作为简写,例如。
@partner.employees.map(&:firstname)
这相当于:
@partner.employees.map { |x| x.firstname }
这也相当于:
firstname = :firstname.to_proc
@partner.employees.map(&firstname)
您可以使用相同的符号传递任何proc或lambda -
@partner.employees.map(&lambda { |x| "#{x.firstname} #{x.lastname}" })
当你可以使用传统的块表示法时,这当然有点无意义:
@partner.employees.map { |x| "#{x.firstname} #{x.lastname}" }.join(', ')
(但无论如何都要知道。)