2013-04-24 2 views
0

Я сопоставляю свой внешний ключ, объявляя его в классе.
Но рельсы называют автомобиль назначенную внешним ключом и бросали ошибки, как,Почему activerecord отображает неназначенный внешний ключ?

неизвестного столбец, где положение декларации
класса приведена ниже,

class Supplier < ActiveRecord::Base 
    has_one :criteria 
    self.primary_key = 'sup_id' 
end 

class Criteria < ActiveRecord::Base 
    belongs_to :supplier, :foreign_key => "crt_sup_id" 
    self.primary_key = 'crt_id' 
    self.table_name = 'criterias' 
end 

Если я использую self.supplier в классе Критерии: он работает нормально

, но если я использую self.criteria в классе Поставщик, тогда ошибка брошена как,

Неизвестный столбец 'criterias.supplier_id' в 'where clause': SELECT criterias. * FROM criterias WHERE criterias. supplier_id

У меня нет поля с именем vend_id в критериях, вместо этого я использую crt_sup_id, как определено в классе.

ответ

0

Вы должны ссылаться на внешний ключ в has_one отношении, а также:

class Supplier < ActiveRecord::Base 
    has_one :criteria, foreign_key: "crt_sup_id" 
    self.primary_key = 'sup_id' 
end 

Причина заключается в том, что по умолчанию ассоциации являются односторонними в рельсах. См. the rails guides для получения дополнительной информации.

+0

При этом я получаю еще одну ошибку NoMethodError (undefined method 'crt_sup_id 'для # <Поставщик: 0x00000015f58560>): – ejo

+0

WTF? вы вставляете точно такой же код? Вы пытались использовать старый синтаксис хэша ': foreign_key =>" crt_sup_id "?? –

+0

Прошу прощения, проблема в том, что некоторые из моих объектов-поставщиков не имеют критериев. Как я могу изменить свое отношение для этого? – ejo

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

  • Нет связанных вопросов^_^