1

当时我用这段代码产生输出:

     <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)

我希望有人可以帮助我找到一个简短的解决方案!谢谢

4

3 回答 3

4

你可能想要类似的东西

@partner.employees.map { |s| "#{s.forename} #{s.lastname} " }.join(',')

于 2013-10-28T20:55:56.737 回答
1

这是一种方法:

<% @partner.employees.each do |s| %>
       <%= %i(forename lastname).map{|m| s.send(m)}.join(" ") + "," %>
<% end %>
于 2013-10-28T20:55:44.127 回答
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(', ')

(但无论如何,很高兴知道。)

于 2013-10-28T21:24:13.197 回答