2011-02-01 2 views
1

名前付きスコープに問題があります。名前付きスコープは、結合テーブルの最初の結果のみを検索します

私は最後のテストに失敗したすべてのマシンを返したいと思います。

私のマシンモデル:

has_many :lodged_tests, :dependent => :destroy 
    has_one :last_test, :class_name => 'LodgedTest', :order => 'created_at DESC' 

    named_scope :last_test_failed, :joins => :last_test, :conditions => [ "lodged_tests.is_passed = ?", false] 

named_scopeが、それ以外の仕事をするには、ANYがテストに失敗したマシンを返します。 最新の(LAST)テストだけが失敗したマシンを返す必要があります。

以下は、私がしようとしていることの簡単な図へのリンクです。

Named Scope Diagram

すべてのヘルプは素晴らしいのおかげだろう。

答えて

0

SQLを使用して希望の結果を達成する方法を理解しましたが、レールはあまり好きではありませんが、仕事は終わりです。

は、条件の副選択に1の制限を含める必要がありました。

named_scope :last_test_failed, :conditions => ["(SELECT is_passed FROM lodged_tests WHERE lodged_tests.machine_id = machines.id ORDER BY created_at DESC LIMIT 1) = ?", false] 

railsスコープ関数を使用してこのクエリを実行する方法を知っている人は、非常に興味があります。

この関連するS.O.質問が正しいパスに入れられました:tricky named scope in RoR

0

制限を1に追加しようとしましたか?

named_scope :last_test_failed, :joins => :last_test, :conditions => [ "lodged_tests.is_passed = ?", false], :order => "created_at desc", :limit => 1 
+0

あなたの助けてくれてありがとう、私はちょうど示唆を与えて、それはアカウント全体で最も最近失敗したテストを返すようです。私はそれが複数の結果を返すために必要です。 –

+0

ああ、最後に失敗したテストが欲しいと言った。限度を取り除き、注文をそのまま残す。 –

+0

私は、私がやろうとしていることをabitで説明するのを助けるために、私の質問にダイアグラムを付けました。 –

関連する問題