0

我正在开发一个批准系统,如果一个示例的负面批准多于正面批准,它将被过滤掉。

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 模型上使用这样的范围,我不确定从哪里开始。

4

1 回答 1

1

好的,根据您的评论,我想我误解了您的问题,但也许您可以尝试这样的事情:

Example.all.select { |example| example.approved == true }

这将为您提供所有已批准示例的数组。

Set.first.examples.all.select { |example| example.approved == true } 

这将为您提供属于第一组记录的所有已批准示例的数组。

我认为可能有一种更优化的方法可以做到这一点,但这确实有效。

于 2013-01-11T19:34:44.837 回答