T.references в миграции vs принадлежит_to в модели?
Я читал Rails Guides, и я нашел эти строки кода:
class CreateComments < ActiveRecord::Migration
def change
create_table :comments do |t|
t.string :commenter
t.text :body
t.references :post
t.timestamps
end
add_index :comments, :post_id
end
end
Я также читал книгу Майкла Хартла, Rails Tutorial, и я ничего не нашел о "t.references", используемом в приведенном выше коде.
Что оно делает? В книге Майкла я использовал has_many и относится к отношениям в модели и ничего в миграции (не событие t.belongs_to).
Ответы
Ответ 1
Это довольно недавнее дополнение к Rails, поэтому оно не может быть описано в книге, которую вы упомянули. Вы можете прочитать об этом в разделе переноса в Rails Guides.
Когда вы создаете, скажем,
rails generate model Thing name post:references
... миграция создаст для вас поле внешнего ключа, а также создаст индекс. То, что делает t.references
.
Вы могли написать
rails generate model Thing name post_id:integer:index
и получил тот же конечный результат.
Ответ 2
Смотрите этот раздел в Rails Guides.
В вашем случае t.references
создает столбец post_id
в вашей таблице comments
. Это означает, что комментарий принадлежит Post, поэтому в модели Comment
вам нужно добавить belongs_to :post
и в модель Post: has_many :comments
.