【问题标题】:Using has_many with Multple Model Types via STI通过 STI 将 has_many 与多种模型类型一起使用
【发布时间】:2016-01-07 23:04:01
【问题描述】:

如何保存和查看两个通过 STI 继承的不同模型的 has_many 关系?

我有一个项目的基本模型如下:

class Project < ActiveRecord::Base
  attr_accessible :slug, 
                  :category_id, 
                  :description, 
                  :name, 
                  :visible, 
                  :note,
                  :contractor, :contractor_url, 
                  :date_complete, :architect, :architect_url, 
                  :building_year, 
                  :project_type, 
                  :address, :city, :state, :country,  
                  :pictures,
                  :photo_credit

  has_many :pictures, :order=>:id, :dependent => :destroy

图片.rb:

class Picture < ActiveRecord::Base
  attr_accessible :project_id, :image, :caption, :cover, :dimensions

  belongs_to :project

使用 STI,我有显示项目子集且特定于主页的主页项目:

class HomepageItem < Project
  attr_accessible :slug, 
                  :name, 
                  :visible, 
                  :note,
                  :pictures,
                  :photo_credit

  has_many :pictures, :order=>:id, :dependent => :destroy

这会导致错误,期望图片上有一个新列 homepage_item_id 而不是 project_id

PG::UndefinedColumn: 错误:列pictures.homepage_item_id 不存在
我相信这应该在pictures.project_id 列上查看。

注意:如果没有在 HomepageItem 中定义 has_many,则会保存项目,但不会创建图片。这也是一个 Rails 3.2.22 项目。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 has-many single-table-inheritance


    【解决方案1】:

    当您看到它在寻找外键时,因此在关联中包含外键,如下所示,

    class HomepageItem < Project
      attr_accessible :slug, 
                      :name, 
                      :visible, 
                      :note,
                      :pictures,
                      :photo_credit
    
      has_many :pictures, :foreign_key =>:project_id, :order=>:id, :dependent => :destroy
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    相关资源
    最近更新 更多