2013-10-28 52 views
0

當時我產生這個代碼的輸出:地圖幾個變量

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

我希望有人可以幫我找到一個短期的解決方案!由於

回答

2

你可能要像

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

1

這裏有一種方法:

<% @partner.employees.each do |s| %> 
     <%= %i(forename lastname).map{|m| s.send(m)}.join(" ") + "," %> 
<% end %> 
1

只是爲了將來參考,這裏發生了什麼事情。

map只需要一個參數,一個塊。如果你只需要調用一個沒有參數的方法,你可以使用符號前面加一個符號作爲縮寫。

@partner.employees.map(&:firstname) 

這相當於:

@partner.employees.map { |x| x.firstname } 

這也等同於:

firstname = :firstname.to_proc 
@partner.employees.map(&firstname) 

您可以通過任何PROC或lambda在那裏使用相同notation--

@partner.employees.map(&lambda { |x| "#{x.firstname} #{x.lastname}" }) 

哪個是當然有點毫無意義時,你可以使用傳統的塊符號:(但是這是很好反正就知道了)

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