当我需要使用 find_by_sql 时,我遇到了一个案例。(没有找到其他变种。这是另一个问题的主题,但我没有足够的时间来解释它)。
所以我有两个表 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"
我不明白为什么范围没有给我't2_name'值,而self方法没有任何问题。有人可以告诉我为什么会这样吗?