【问题标题】:ruby on rails 4 foreign key and association to access another table's attributesruby on rails 4 外键和关联访问另一个表的属性
【发布时间】:2014-08-06 13:43:18
【问题描述】:

问题是如何列出与每个项目关联的所有资产?

这是我目前所拥有的: 我有一个项目模型和资产模型。一个项目可以有很多资产(由载波上传)

这里是项目.rb

class Project < ActiveRecord::Base
    validates :title, length: { maximum: 150 } ,uniqueness: true, presence: true
    has_many :assets
end

这里是asset.rb

class Asset < ActiveRecord::Base
    mount_uploader :attachment, AttachmentUploader 
    belongs_to:project
end

在 project_controller.rb 的索引方法中,我有以下实例变量:

class ProjectsController < ApplicationController
    def index
    @projects = Project.all
    @assets = Asset.all
     end

  def project_params
      params.require(:project).permit(:title,assets_attributes: [:id,:project_id,:attachment])
  end
end

这是视图 index.html.erb,它列出了与项目无关的所有资产

<% @projects.each do |project| %>
    <td><%= project.title %></td>
        <% @assets.each do |asset| %>
            <td><%= asset.attachment.size %></td> 
         <% end %>
<% end %>

【问题讨论】:

  • 你的问题到底是什么?
  • 在我的索引文件中,我想要与每个项目关联的资产,使用此代码,我拥有每个项目的所有资产。我不知道如何添加 where 子句或条件来修复它。
  • 您只需要project.assets 即可获取当前项目的资产。
  • 嗯,我试过了,这就是我写在这里的原因,它会引发这个错误`未定义的方法attachment' for #&lt;Asset::ActiveRecord_Associations_CollectionProxy:0x007fed63e97e08&gt;
  • 那么给出错误是个好主意。帮助我们帮助您;)

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord foreign-key-relationship model-associations


【解决方案1】:

您的视图应如下所示:

<% @projects.each do |project| %>
    <td><%= project.title %></td>
    <% project.assets.each do |asset| %>
        <td><%= asset.attachment.size %></td> 
    <% end %>
<% end %>

不要忘记从控制器中删除@assets = Asset.all,并考虑添加分页。

此外,为了避免在您的视图中出现 N+1 个查询,您可以这样做

@projects = Project.includes(:assets) # you dont need .all, I think it's deprecated in rails 4 when you use it this way

在您的控制器中。这将在 1 个查询中加载所有需要的项目。

如果你只需要资产的 size 属性,你可以这样做以提高效率:

@projects = Project.includes(:assets).select('projects.*, assets.size').references(:assets)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多