ApplicationRecord 关联方法查找如何工作?

How does ApplicationRecord association method lookup work?

据我了解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 在评论中所说的那样,当您使用元编程时,您不是在定义方法,而是在调用它们,因此不涉及继承。