Rails: принадлежащая принадлежность не возвращает правильный объект

У меня есть модель заказа с двумя ассоциациями "принадлежат к одному", каждый из которых относится к своему подклассу модели моего аккаунта. После загрузки заказа из базы данных обе ассоциации указывают на одну и ту же модель, хотя внешние ключи верны.

class Account < AR::Base
end

class FooAccount < Account
end

class BarAccount < Account
end

class Order < AR::Base
  belongs_to :account, :class_name => 'FooAccount', 
    :foreign_key => :account_id
  belongs_to :different_account, :class_name => 'BarAccount', 
    :foreign_key => :different_account_id
end

Консоль делает что-то вроде этого:

o = Order.find(42)
=> #<Order id: 42, account_id: 11, different_account_id: 99>
a = Account.find(11)
=> #<FooAccount id: 11, type: "FooAccount">
d = Account.id(99)
=> #<BarAccount id: 99, type: "BarAccount">
o.account_id
=> 11
o.account
=> #<BarAccount id: 99, type: "BarAccount">
o.different_account_id
=> 99
o.different_account
=> #<BarAccount id: 99, type: "BarAccount">

Значения внешнего ключа являются правильными, но объект, на который ссылается ассоциация, не является! Что я делаю неправильно?

1 ответ

Решение

Убедитесь, что у вас нет столкновений с другими методами! Я оставил определение в модели заказа:

class Order < AR::Base
  belongs_to :account

  # a lot and a lot of code

  def account
    # does a different lookup than the association above
  end
end

Удаление метода учетной записи дало мне правильное поведение.

Другие вопросы по тегам