ruby-on-rails – Rails从多态模型加入或预加载belongs_to关联
我的问题是如下.我如何加入belongs_to多态模型的关联
有情况 opinion.rb class Opinion < ActiveRecord::Base belongs_to :opinionable,:polymorphic => true belongs_to :category end answer.rb class Answer < ActiveRecord::Base has_many :opinions,:as => :opinionable end 我该怎么做跟随
它会抛出
我如何具体要加入哪个班级? 第二个问题如何预加载?
工作正常.它将对belongs_to中的每个类进行查询. 但.如果我想做一些类似的事情
有问题,因为一个模型有这个关联,第二个没有.所以它会抛出异常. 那么我可以做些什么呢
? 谢谢大卫! 解决方法
您的Opinion模型看起来好像没有为您指定explicitable_type:string列.
尝试以这种方式更新您的迁移: class CreateOpinions < ActiveRecord::Migration def self.up create_table :opinions do |t| t.integer :opinionable_id t.string :opinionable_type # ... other fields t.timestamps end end def self.down drop_table :opinions end end 这将解决您的第二个问题和Opinion.preload(:舆论). 你不能加入多态关联,因为它们可以位于不同的表中,在加载了意见模型之后被检测到.那为什么模型需要列commentable_type. 如果您尝试这样做,您会得到下一个例外
UPD:添加魔法加入^ _ ^ class Opinion < ActiveRecord::Base belongs_to :opinionable,:polymorphic => true belongs_to :opinionable_answer,:foreign_key => :opinionable_id,:class_name => "Answer" scope :by_type,lambda { |type| joins("JOIN #{type.table_name} ON #{type.table_name}.id = #{Opinion.table_name}.opinionable_id AND #{Opinion.table_name}.opinionable_type = '#{type.to_s}'") } end 例: Opinion.by_type(Answer).to_sql => "SELECT "opinions".* FROM "opinions" JOIN answers ON answers.id = opinions.opinionable_id AND opinions.opinionable_type = 'Answer'" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |