范围仅仅是语法糖,还是使用类与使用类方法有什么真正的优势?

下面是一个简单的示例。据我所知,它们是可互换的。

scope :without_parent, where( :parent_id => nil )

# OR

def self.without_parent
  self.where( :parent_id => nil )
end

每种技术最适合什么?

编辑

named_scope.rb提到以下内容(如下goncalossilva所指出):

54:



113:


class Shirt < ActiveRecord::Base
  scope :red, where(:color => 'red') do
    def dom_id
      'red_shirts'
    end
  end
end

最佳答案

对于简单的用例,可以将其视为语法糖。但是,还存在一些其他差异。

例如,一种是在范围内定义扩展的能力:

class Flower < ActiveRecord::Base
  named_scope :red, :conditions => {:color => "red"} do
    def turn_blue
      each { |f| f.update_attribute(:color, "blue") }
    end
  end
end

在这种情况下,turn_blue仅适用于红色花朵(因为它不是在Flower类中定义的,而是在作用域本身中定义的)。

关于ruby-on-rails - Rails 3中的作用域与类方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6375896/

10-13 07:56