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 
相關問題