假设我有这个范围:
scope :with_zipcode, lambda { |zip| where(zipcode: zip) }
我想要一个等效的范围
scope :has_zipcode, lambda { |zip| where(zipcode: zip) }
有没有办法将一个范围别名为另一个范围?例如像
alias :with_zipcode, :has_zipcode
PS我知道这是一个人为且不切实际的例子,只是想知道是否可能!
谢谢!
假设我有这个范围:
scope :with_zipcode, lambda { |zip| where(zipcode: zip) }
我想要一个等效的范围
scope :has_zipcode, lambda { |zip| where(zipcode: zip) }
有没有办法将一个范围别名为另一个范围?例如像
alias :with_zipcode, :has_zipcode
PS我知道这是一个人为且不切实际的例子,只是想知道是否可能!
谢谢!
是的你可以。请记住,作用域是类方法,因此您需要在类的上下文中使用别名:
class User < ActiveRecord::Base
scope :with_zipcode, lambda { |zip| where(zipcode: zip) }
singleton_class.send(:alias_method, :has_zipcode, :with_zipcode)
end
为类方法定义别名的另一种方法,我个人觉得它更不言自明:
class User < ActiveRecord::Base
scope :with_zipcode, lambda { |zip| where(zipcode: zip) }
class << self
alias has_zipcode with_zipcode
end
end
另一种解决方案是从另一个范围调用一个范围
class User < ActiveRecord::Base
scope :with_zipcode, lambda { |zip| where(zipcode: zip) }
scope :has_zipcode, lambda { |zip| with_zipcode(zip) } # essentially an alias
end
使用singleton_class.send(:alias_method, :a, :b)
可能不那么模棱两可,但只是想提醒另一种选择。