如何从Ruby Associations CollectionProxy中提取特定字段?

时间:2017-01-11 23:22:05

标签: ruby associations

我有以下型号:

class User < ApplicationRecord
  has_many :hobbies, dependent: :destroy
end

class Hobby < ApplicationRecord
  belongs_to :user
end

我试图输出用户及其爱好的视图:

<table>
  <tr>
    <th>User</th>
    <th>Hobby</th>
  </tr>
  <% @users.each do |u| %>
  <tr>
     <td><%= u.name %></td>
     <td><%= u.hobbies %></td>
  </tr>
  <% end %>
</table>

但我看到以下内容:

User    Hobby
Mad Max <Hobby::ActiveRecord_Associations_CollectionProxy:0x007fa2721ab910>

看起来我正在输出集合,但我想要实际的爱好名称。我已经尝试了u.hobbies.first,u.hobbies [:业余爱好]等等。我已经查看http://api.rubyonrails.org/classes/ActiveRecord/Associations/CollectionProxy.html内部,但它作为一名新开发者让我感到困惑。有人能告诉我如何从集合中的特定字段中提取?哪个资源有一个很好的指导供我参考?

1 个答案:

答案 0 :(得分:1)

所以这基本上是一系列爱好附加到用户身上。所以你需要遍历每一个,然后从中询问你想要的属性。尝试这样的事情:

<table>
  <tr>
    <th>User</th>
    <th>Hobby</th>
  </tr>
  <% @users.each do |user| %>
  <tr>
     <td><%= user.name %></td>
     <td>
       <% user.hobbies.each do |hobby| %>
         <%= hobby.attribute_name %>,
       <% end %>
     </td>
  </tr>
  <% end %>
</table>

如果你想得到真正的幻想,你可以尝试做这样的事情:

<% user.hobbies.each_with_index do |hobby, index| %>
   <%= hobby.attribute_name %>
   <%= (index == user.hobbies.length-1) ? '' : ','
<% end %> 

那是使用三元运算符基本上只说逗号只是爱好不是最后的爱好