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”关系?