我正在制定一个批准系统,如果有更多的负面批准而不是正面,则会过滤掉一个示例。
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
获得属于示例的所有批准。
我想知道的是,如果可以在示例模型上创建一个方法,那么我可以使用la Example.approved
,它将返回true或false并使用单个查询取决于如果示例有更多Approvals with 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
看起来像here中的SQL View approved_examples,但如果我想在Set模型上使用这样的范围,我不确定从哪里开始。
答案 0 :(得分:1)
好的,根据你的评论,我认为我误解了你的问题,但也许你可以尝试这样的事情:
Example.all.select { |example| example.approved == true }
这将为您提供一系列经过批准的示例。
Set.first.examples.all.select { |example| example.approved == true }
这将为您提供属于第一组记录的所有已批准示例的数组。
我认为这可能是一种更优化的方法,但这确实有用。