我正在研究一个审批系统,如果一个例子的负面批准多于正面批准,它将被过滤掉。
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与单个查询取决于该示例是否有更多的批准为真或假。最后,我想只调用通过调用Set.approved_examples
而被批准的集合中的示例。
的例子。我可以用
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视图approved_examples在这里,但我不确定从哪里开始,如果我想在Set模型上这样的一个范围。
好吧,根据你的评论,我想我误解了你的问题,但也许你可以尝试这样做:
Example.all.select { |example| example.approved == true }
这将为您提供所有批准示例的数组。
Set.first.examples.all.select { |example| example.approved == true }
这将得到属于第一个集合记录的所有已批准示例的数组。
我认为可能有一个更理想的方法来做到这一点,但这确实有效。