一个用户可以拥有多辆车 -
User: has_many :cars
Car: belongs_to :user
每次我打电话@user.cars
它返回的列表cars
按默认搜索顺序。
如果我希望关联在某个任意字段上排序,我可以这样做
class User < ActiveRecord::Base
has_many :cars, -> { order :num_wheels }
end
但是假设我的排序逻辑很复杂,我只想重写关联 getter 来实现我自己的逻辑
我尝试类似的东西 -
class User < ActiveRecord::Base
has_many :cars
def cars
# Pretend this is complex logic
cars.order(:num_wheels)
end
end
但这显然失败了,因为你无法引用原始内容cars
从被覆盖的内部cars
方法而不无限循环。
有没有办法从我重写的 getter 内部引用“原始”getter?
Thanks!
使用超级:
class User < ActiveRecord::Base
has_many :cars
def cars
# Pretend this is complex logic
super.order(:num_wheels)
end
end
当您使用像 has_many 这样的宏时,Rails 会动态创建一个模块(可以通过 User. generated_association_methods 访问)。在您的情况下,定义访问器和读取器(例如您的情况下的“cars”,可以由 User 访问。 generated_association_methods.instance_methods)。该模块成为您的 User 类的祖先,因此您可以在您自己的 cars 方法中通过“super”访问阅读器方法(cars)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)