Подтвердить что ты не робот

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).

4b9b3361

Ответ 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.