2011-09-26 16 views
0

我有User.all,它返回3個結果。如何使用to_sentence與AR集合

我怎樣才能使它所以我可以每個結果呈現的東西,如:

<a href="path_to_user_foo_here">Foo</a>, <a href="path_to_user_bar_here">Bar</a>, and <a href="path_to_user_foobar_here">Foobar</a> 

哪個瀏覽器中呈現時,將顯示爲:

Foo, Bar, and Foobar 

我瞭解to_sentence幫手。但不知道如何執行此操作,因爲User.all會返回3個散列對象。我可以使用.map(&:first_name),但我將如何能夠在link_to方法中提供路徑路徑。

尋找一種可行的方法。

回答

1

我想你正在尋找這樣的東西。 (回答更新)

在助手

module ApplicationHelper 
    ... 
    include ActionController::UrlWriter 
    def generate_user_links_sentence 
    links = User.all.collect do |user| 
     link_to user.first_name, user_path(user) 
    end 
    links.to_sentence 
    end 
    ... 
end 

# Example: <%= generate_user_links_sentence %> 

可以分離出生成邏輯到控制器中,如果你願意的話,但它足以從一個輔助訪問路由路徑很難,更不用說控制器。從某種角度來看,可能有更好的方法來做到這一點,但這是我現在可以真正想到的。

更新:就在一個觀點:

<%= User.all.collect{|u| link_to u.first_name, user_path(u)}.to_sentence %> 
+0

可能要'links.to_sentence.html_safe'如果你打算只使用''<%= ... %>。 –

+0

更改上下文。我正在嘗試:'<%= @ comments.collect(&:user).uniq {| u | link_to u.first_name,user_path(u)} .to_sentence%>'。我得到:'#<用戶:0x00000100c70050>' –

+0

嘗試'<%= @ comments.collect {| c | link_to c.user.first_name,user_path(c.user)} .uniq.to_sentence%>' –

相關問題