我正在开发一个批准系统,如果一个示例的负面批准多于正面批准,它将被过滤掉。
class Set < ActiveRecord::Base
has_many :examples
end
class Example < ActiveRecord::Base
has_many :approvals, as: :approvable
end
class Approval < ActiveRecord::Base
belongs_to :approvable, polymorphic: true
belongs_to :example
attr_accessible :choice #boolean
end
我可以通过调用来获得属于示例的所有批准Example.approvals
。
我想知道的是,是否有可能在示例模型上创建一个方法,然后我可以使用一个 laExample.approved
来通过单个查询返回 true 或 false,具体取决于该示例是否有更多 Approvals 的 true 或 false。最终,我只想调用已通过调用批准的集合的示例Set.approved_examples
。
Example.approved 我可以用
class Example < ActiveRecord::Base
...
def approved
if approvals.where(choice: true).count > approvals.where(choice: false).count
return true
end
false
end
end
虽然这需要两个查询。
Set.approved_examples
看起来像这里的 SQL Viewapproved_examples但如果我想要在 Set 模型上使用这样的范围,我不确定从哪里开始。