【问题标题】:Traversing Through Multiple Associations (Rails)遍历多个关联(Rails)
【发布时间】:2014-03-23 13:56:51
【问题描述】:

我有点坚持这个。我将不胜感激。

概述

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

模型

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

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

这是我的回形针模型:

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 个文件

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

    根据Paperclip documentation

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

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

    鉴于此,并且您的附件名称为“文档”:

    <% 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 %>
    

    【讨论】:

    • 您好,感谢您的回复。不幸的是,我收到了 undefined method 'document' 错误。
    • 对不起,我之前的回答是pre-coffee,你需要通过上传关联。试试修改后的版本。
    • 我也可以使用我的预定义方法——非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多