7

说我有这个范围:你可以在Rails中使用别名吗?

scope :with_zipcode, lambda { |zip| where(zipcode: zip) } 

,我想等效范围

scope :has_zipcode, lambda { |zip| where(zipcode: zip) } 

是有没有办法别名一个范围到另一个?例如类似

alias :with_zipcode, :has_zipcode 

P.S.我知道这是一个人为的和不切实际的例子,只是想知道它是否可能!

谢谢!

回答

15

是的,你可以。请记住,范围是类方法,因此您需要在类的上下文中执行别名:

class User < ActiveRecord::Base 
    scope :with_zipcode, lambda { |zip| where(zipcode: zip) } 
    class << self 
    alias_method :has_zipcode, :with_zipcode 
    end 

    # or with Ruby 1.9+ 
    singleton_class.send(:alias_method, :has_zipcode, :with_zipcode) 
end 
相关问题