Для какой связи ActiveRecord один-ко-многим какую опцию: foreign_key следует установить? - PullRequest
1 голос
/ 14 мая 2009
Методы

ActiveRecord has_many и belongs_to оба принимают вариант :foreign_key. Если мне нужно использовать его для обработки нестандартного имени столбца FK, должен ли я установить его для родительской модели (has_many), дочерней модели (belongs_to) или для обоих, или это важно?

Ответы [ 2 ]

2 голосов
/ 14 мая 2009

belongs_to предполагает, что внешний ключ является именем ассоциации плюс _id.

has_one предполагает, что внешний ключ является именем содержащего класса плюс _id.

Обычно для нестандартного ключа он нужен только в одном месте.

class Book < ActiveRecord::Base
  # Rails default fk is isbn_id
  belongs_to :isbn, :class_name => "BarCode", :foreign_key => "bar_code_id" 
end

class BarCode < ActiveRecord::Base
  # Rails default fk is bar_code_id, so you don't need to specify it
  has_one :book
end
2 голосов
/ 14 мая 2009

Вы должны установить опцию :foreign_key на обоих.

Рассмотрим следующие две модели:

class Article < ActiveRecord::Base
  has_many :comments, :foreign_key => "articleID"
end

class Comment < ActiveRecord::Base
  belongs_to :article, :foreign_key => "articleID"
end

Объявление has_many в классе Article позволяет вам:

Article.find(12).comments  # Finds all comments with comment.articleID == 12

Вызов метода belongs_to в модели Comment позволяет:

Comment.last.article       # Finds article with article.id == comment.articleID

Как видите, в обоих случаях используется внешний ключ. Если этот параметр не указан в любом из этих мест, он не будет работать должным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...