2015-07-15 3 views
2

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

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 

Console делает что-то вроде этого:

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"> 

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

+0

Я бы попытался указать 'foreign_key' и' class_name' для 'account' тоже. – wpp

+1

У вас есть метод в 'Order', называемый' account', который переопределяет определение 'own_to'. Если вы удалите 'own_to: account', будет ли' order.account' указывать на 'BarAccount'? – AbM

+0

@AbM - вот и все –

ответ

0

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

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 

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

Смежные вопросы