遍历多个关联(Rails)

时间:2014-03-23 13:56:51

标签: ruby-on-rails ruby ruby-on-rails-4 associations paperclip

我对这一点感到有点困惑。我很感激输入。

概述

我正在尝试获取此友谊模型中所需的输出,即当前用户的朋友已上传的文件。

模型

与所有其他友情模式一样,User自我引用为:friend

class Share < ActiveRecord::Base
    belongs_to :user
    belongs_to :friend, :class_name => "User"
end

这是我的Paperclip模型:

class Upload < ActiveRecord::Base
    belongs_to :user
    has_attached_file :document
end

这是通过Devise生成的:

class User < ActiveRecord::Base
    attr_accessor :login

    has_attached_file :image, :styles => { :medium => "120x120!" }

    has_many :uploads
    has_many :shares
    has_many :friends, :through => :shares
    has_many :inverse_shares, :class_name => "Share", :foreign_key => "friend_id"
    has_many :inverse_friends, :through => :inverse_shares, :source => :user
end

尝试

我所达到的最远的是我能够输出用户朋友':username(s)的级别,其中@check = current_user位于控制器中:

<% @check.shares.each |j| %>
        <%= j.friend.username %>
<% end %>

问题

如何输出当前用户的每个朋友的:file_name:file_type:document?我打算让我的页面看起来像这样:

用户的朋友1档

  • 文件名
  • 文件类型
  • 文档

用户的朋友2档

  • 文件名
  • 文件类型
  • 文档

谢谢。

1 个答案:

答案 0 :(得分:1)

根据Paperclip documentation

  

Paperclip将包含最多四个属性(所有属性都以前缀为准)   附件的名称,因此每个模型可以有多个附件   你希望)并给他们一个友好的前端。这些属性是:

<attachment>_file_name
<attachment>_file_size
<attachment>_content_type
<attachment>_updated_at

鉴于此,以及您的附件名称“document”:

<% current_user.shares.each do |share|%>
    <%= share.friend.username %>
    <% share.friend.uploads.each do |upload| %>
        <%= upload.document_file_name %>
        <%= upload.document_content_type %>
    <% end %>
<% end %>