我有以下型号:
class Publication < ActiveRecord::Base
has_many :reviews
has_many :users, :through => :owned_publications
has_many :owned_publications
end
class User < ActiveRecord::Base
has_many :publications, :through => :owned_publications
has_many :owned_publications
end
class OwnedPublication < ActiveRecord::Base
belongs_to :publication
belongs_to :user
has_one :review, :conditions => "user_id = #{self.user.id} AND publication_id = #{self.publication.id}"
end
在第三个模型中,我尝试使用一对变量设置条件。语法似乎有效,只是 self 不是 OwnedPublication 的实例。是否可以获取 OwnedPublication 的当前实例并将其放入条件中?
最佳答案
该解决方案需要使用 :through 和 :source 选项,以及过程调用:
has_one :review, :through => :publication, :source => :reviews,
:conditions => proc { ["user_id = ?", self.user_id] }
Proc 是向 ActiveRecord 关联条件传递动态变量的技巧,至少从 Rails 3.0 开始是这样。只需调用:
has_one :conditions => proc { ["publication_id = ? AND user_id = ?",
self.publication_id, self.user_id] }
但是,不会工作。这是因为关联最终将在评论表中搜索不存在的“reviews.owned_publication_id”列。相反,您可以使用出版物的 :reviews 关联作为来源,通过出版物找到正确的评论。
关于ruby-on-rails - 条件与变量的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14569732/