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

私が疑問に思っているのは、サンプルモデルにメソッドを作成してExample.approved、サンプルにtrueまたはfalseの承認がさらにあるかどうかに応じて、単一のクエリでtrueまたはfalseを返すlaを使用できるかどうかです。最終的には、を呼び出すことによって承認されたセットの例のみを呼び出したいと思います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

ただし、2つのクエリが必要です。

Set.approved_examplesここではSQLビューのauthorized_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 に答える