0
我在具有Publication
,Observation
和Species
模型,得到用戶的記錄可以被「驗證」一rails4應用程序的工作(設計User
模型)多態關聯(Validation
模型)。範圍,以通過篩選記錄至少3「近期的」多態關聯
如果出版物自發布最後更新(即至少3次驗證爲validation.updated_at >= publication.updated_at
)以來至少有三名用戶驗證,則出版物(及其通過關聯的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")
非常感謝您!我曾嘗試過,但現在發現它之前沒有工作,因爲我的視圖中出現了@ @ publications.count(這產生了SQL錯誤)。你會知道爲什麼我不能對結果執行'.count'嗎?另外 - 爲了做相反的事情(找到未驗證的記錄),我假設我需要做一個左連接('include')以包含帶有0個驗證的出版物 - 但是這會給出'validations_count'的問題?我怎麼能解決這個問題? – pimbo
1.「count」是Rails中的一個特殊字,可能更適合將列重命名爲「counter」。 2.在Rails 5.0中,你可以在Rails 4.2中調用'left_joins(:validations)',你需要將連接寫成字符串'joins(「LEFT JOIN驗證ON publication.id = validations.publication_id」)''。你也應該刪除'有'情況。 –