2011-01-09 15 views
0

我是新手...使用to_sentence

我知道如何使用「to_sentence」當我有這樣的:

<%= @blah.collect {|b| b.name}.to_sentence %> 

但如果我有一個更復雜的塊,如:

<% skill.position.each do |position| %>    
    <a href="<%= position.company.url %>"><%= position.company.name %></a> 
    <% if position.salary? %> 
    <span><%= position.salary %></span> 
    <% end %> 
<% end %> 

所需的輸出是:

Microsoft, Google 2000, and Yahoo. 
+0

這不是很清楚你需要什麼樣的輸出爲`each`。請舉例說明所需的輸入和輸出。 – Zabba 2011-01-09 21:27:05

回答

1

難道你只是收集它沒有.each?

<%= skill.positions.collect{ |p| "<a href=\"#{p.company.url}\">#{p.company.name}</a>#{position.salary? ? '<span>#{position.salary}</span>' : nil}" }.to_sentence %> 

這應該爲你工作...

你也可以這樣做:

<%= skill.position.each do |position| %>    
    <a href="<% position.company.url %>"><% position.company.name %></a> 
    <% if position.salary? %> 
    <span><% position.salary %></span> 
    <% end %> 
<% end.to_sentence %> 
1

to_sentence方法適用於數組。它可以作用於你的第一個例子是因爲...

<%= @blah.collect {|b| b.name}.to_sentence %> 

...是因爲collect方法返回一個Array。您的第二個示例中的每種方法也將工作,因爲each也會返回Array。所以,這將工作:

<% blah.each do |b| %> 
    ... 
<% end.to_sentence %> 
+0

<%end.to_sentence%>看起來很性感,它幾乎奏效,但是我不知道爲什麼,但是它產生了很多 .. – 2011-01-09 21:51:16

+0

你需要從你的<%=和將它添加到開始處。我附加了我的答案,包括此解決方案(在30秒內) – sethvargo 2011-01-09 21:54:48