gpt4 book ai didi

ruby-on-rails - ApplicationRecord 关联方法查找如何工作?

转载 作者:数据小太阳 更新时间:2023-10-29 08:11:19 26 4
gpt4 key购买 nike

据我了解 Ruby 继承和方法查找,当子实例调用父实例方法时,父实例方法又调用在父实例和子实例中都命名的方法,作用域仍在子实例中。所以这会发生:

class Foo 

def method1
"foo"
end

def method2
puts method1
end
end

class Bar < Foo

def method1
"bar"
end
end

Bar.new.method2
=> "bar"

但是,当我做我认为与 ActiveRecord 关联类似的事情时,我没有得到我期望的结果:

class Foo < ApplicationRecord

has_many :orders
has_many :order_items, through: :orders
end

class Bar < Foo

has_many :orders, -> { where(attribute1: 1) }
end

当我调用 bar.orders 时,我得到了我期望的结果。但是当我调用 bar.order_items 时,我得到的结果与调用 foo.order_items 时相同(未使用查询范围)。如果我在 bar.rb 中包含 has_many :orders_items, through: :orders 它的行为符合我的预期。为什么 ApplicationRecords 会这样?我是在将苹果与橙子进行比较吗?

最佳答案

就像 Max 在评论中所说的那样,当您使用元编程时,您不是在定义方法,而是在调用它们,因此不涉及继承。

关于ruby-on-rails - ApplicationRecord 关联方法查找如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39671371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com