Rails 视图:加入 has_many 关系而不是遍历它们?

Posted

技术标签:

【中文标题】Rails 视图:加入 has_many 关系而不是遍历它们?【英文标题】:Rails views: join on has_many relations instead of iterating through them? 【发布时间】:2011-08-28 07:32:43 【问题描述】:

Rails 视图:加入对象

嗨,

想想与模型角色有 has_many 关系的模型用户的显示视图。我想遍历属于某个用户的所有关联角色。现在它看起来像这样:

<div>associated roles:</div>
<ul>
<% @user.roles.each do |r| %>
<li><%= r.name %></li>
<% end %>
</ul>

例如导致:

associated roles:
* registered
* manager
* administrator

我的问题:

是否有一种类似于 Rails 的方式来获得如下输出而无需遍历整个数组?

associated roles:
registered, manager, administrator

我尝试了join方法...

<div>associated roles:</div>
<%= @user.roles.join(",") %>

...但这会导致...

associated roles:
#<Role:0xb6dde328>,#<Role:0xb6dde2ec>,#<Role:0xb6dde1f5>

还有类似...

<div>associated roles:</div>
<%= @user.roles.join(",").name %>

... 导致未定义的方法“名称”错误。 任何优雅方式的提示?

谢谢

【问题讨论】:

【参考方案1】:
@user.roles.collect(&:name).join(",")

【讨论】:

另一种解决方案是在 Role 类中覆盖 to_s

以上是关于Rails 视图:加入 has_many 关系而不是遍历它们?的主要内容,如果未能解决你的问题,请参考以下文章

Rails RSpec 测试 has_many :through 关系

何时在 Rails 中使用“has_many :through”关系?

Rails 4找不到关联has_many,通过:关系错误

has_many的Rails组合框问题:通过关系

Rails 订单产品价格按其最小值 has_many 关系升序和降序

Rails 查询具有 has_many 和 belongs_to 关系的模型