我正在开发具有Publication
,Observation
和Species
模型的rails4应用程序,其中的记录可由用户“验证”(Devise User
模型)通过多态关联(Validation
模型)。
如果自上次更新发布以来至少有三个用户验证了出版物(即validation.updated_at >= publication.updated_at
至少3次验证),则出版物(及其通过关联的HABTM模型的元数据)被视为“已验证”。实施此条件是为了在用户验证后发布的信息发生变化时,不会计算那些特定的“过时”验证,直到用户重新验证(通过关联上的touch
)。
我试图找出如何为scope :validated
模型生成scope :unvalidated
和Publication
(即仅过滤经过验证的出版物)。
class Publication < ActiveRecord::Base
has_and_belongs_to_many :users // authors of that publication
has_many :validations, as: :validatable
has_many :validation_users, through: :validations, source: :user
end
class Validation < ActiveRecord::Base
belongs_to :validatable, polymorphic: true
belongs_to :user
end
class User < ActiveRecord::Base
has_many :validations
end
我可以检索至少有3次验证的出版物,如下所示(类似于this) - 但是我怎样才能最好地检索(最好作为范围)只有那些在最后一次更新后更新至少3次验证的出版物。出版物?
Publication.select("publications.*, count(validations.id) as validations_count").joins(:validations).group("publications.id").having("validations_count > 2")
答案 0 :(得分:0)
您只需要添加上述条件:
Publication.
select("publications.*, count(validations.id) as validations_count").
joins(:validations).
where("validations.updated_at >= publications.updated_at").
group("publications.id").
having("validations_count > 2")