Rails 3:通过计算子节点来过滤结果



我正在研究一个审批系统,如果一个例子的负面批准多于正面批准,它将被过滤掉。

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 } 

这将得到属于第一个集合记录的所有已批准示例的数组。

我认为可能有一个更理想的方法来做到这一点,但这确实有效。

相关内容

  • 没有找到相关文章

最新更新