0

find_by_sql を使用する必要がある場合に直面しました。(他の変種は見つかりませんでした。別の質問のトピックですが、説明する時間がありません)。

だから私は2つのテーブルT1、T2とモデルを持っています...それを「アイテム」と呼びましょう

そこで、スコープとセルフ メソッドの動作が大きく異なり、その理由が分からない場合の例を書きます。これは実際のコードではなく、ほんの一例です。

Class Item < ActiveRecord::Base
  scope :my_selection_scope, lambda { |var| find_by_sql(["SELECT T1.*, 
    T2.name AS t2_name
    FROM T1
    LEFT OUTER JOIN T2 ON T2.t1_id = T1.id
    WHERE T1.value = ?", var])
  }

  def self.my_selection_method(var)
    find_by_sql(["SELECT T1.*, T2.name AS t2_name
      FROM T1
      LEFT OUTER JOIN T2 ON T2.t1_id = T1.id
      WHERE T1.value = ?", var])
  end
end

コンソールから:

Item.my_selection_scope(var)[0].t2_name
=> undefined method 't2_name' for #<Item>
Item.my_selection_method(var)[0].t2_name
=> "success"

self メソッドが問題なく実行したのに、スコープが 't2_name' 値を与えなかった理由がわかりません。なぜそれが起こっているのか誰か教えてもらえますか?

4

0 に答える 0