我的示例中范围和自我方法有什么区别?

时间:2013-06-10 14:33:12

标签: ruby-on-rails ruby-on-rails-3 activerecord

我遇到需要使用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方法没有任何问题时。有人可以告诉我为什么要这样做?

0 个答案:

没有答案