2013-10-27 2 views
0

Использование Rails 3.2. У меня есть таблица, предоставленная поставщиком, которую я не могу изменить. State имеет 2 внешних ключа. Ниже приведен упрощенный код:has_one ассоциация соответствует 2 внешним ключам

# shops.rb 
class Shop < ActiveRecord::Base 
    self.primary_key = "shop_id" 
    has_one :state, foreign_key: "shop_id" 
end 

# states.rb 
class State < ActiveRecord::Base 
    self.primary_key = ["shop_id", "country_id"] # when there are multiple parent keys 
    belongs_to :shops, foreign_key: "shop_id" 
end 

# shop record 
shop_id country_id 
==================== 
1    3 

# state records 
shop_id country_id 
===================== 
1    4 
1    6 
1    3 
1    9 

Вы заметите, у меня будет только один shop запись с shop_id = 1, но state будет иметь несколько соответствующих записей. Как я могу быть уверен, что когда я запустил следующее, я вернул правильную запись?

a = Shop.find(1) 
a.state # => #<State shop_id: 1, country_id: 3> 

ответ

1

Первичный ключ для таблицы состояний - составной. При получении правильной записи состояния вам нужно указать country_id.

a = Shop.find(1) 
a.states.where(:country_id => a.country_id) 
+0

Но это 'has_one', я должен использовать' states' или изменить 'has_many'? – Victor

+0

вам придется изменить его на 'has_many', глядя на ваш государственный стол, у вас явно есть несколько государственных записей для магазина. – rb512

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