ruby-on-rails - 条件与变量的关系

标签 ruby-on-rails rails-activerecord

我有以下型号:

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/

相关文章:

ruby-on-rails - 如何为 Rails 中的部分参数提供默认值?

ruby-on-rails - Capistrano 和 Assets :precompile not working due to rake versioning issue

ruby-on-rails - 嵌套属性未插入表中

ruby-on-rails - Rails ActiveRecord 条件

ruby-on-rails - 获取rails路线的参数

javascript - Ruby on Rails 实时更新

ruby-on-rails - rails 4 : getting Webpacker to work with CircleCI

ruby-on-rails - Rails - 乐观锁定总是触发 StaleObjectError 异常

ruby-on-rails - 如何按日期计数获取此 postgres 组包括带 0 的天数

ruby-on-rails - 嵌套形式的 Rails 复选框