2011-09-26 39 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%>' –