筛选具有至少 3 个 "recent" 多态关联的记录的范围
Scope to filter records with at least 3 "recent" polymorphic associations
我正在开发一个具有 Publication
、Observation
和 Species
模型的 rails4 应用程序,用户可以 "validated" 记录这些模型(设计 User
模型)通过多态关联(Validation
模型)。
如果该出版物自上次更新以来至少由三个用户验证(即 validation.updated_at >= publication.updated_at
至少 3 次验证,则该出版物(及其通过关联的 HABTM 模型的元数据)被视为 "validated" ).实施此标准后,如果出版物上的信息在用户验证后发生更改,则不会计算这些特定的 "outdated" 验证,直到用户重新验证(通过关联上的 touch
)。
我想弄清楚如何为 Publication
模型生成 scope :validated
和 scope :unvalidated
(即仅过滤经过验证的出版物)。
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")
您只需添加上述条件:
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")
我正在开发一个具有 Publication
、Observation
和 Species
模型的 rails4 应用程序,用户可以 "validated" 记录这些模型(设计 User
模型)通过多态关联(Validation
模型)。
如果该出版物自上次更新以来至少由三个用户验证(即 validation.updated_at >= publication.updated_at
至少 3 次验证,则该出版物(及其通过关联的 HABTM 模型的元数据)被视为 "validated" ).实施此标准后,如果出版物上的信息在用户验证后发生更改,则不会计算这些特定的 "outdated" 验证,直到用户重新验证(通过关联上的 touch
)。
我想弄清楚如何为 Publication
模型生成 scope :validated
和 scope :unvalidated
(即仅过滤经过验证的出版物)。
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")
您只需添加上述条件:
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")