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

Создавать отношения, когда строительные леса

Привет, я новичок в Ruby on Rails. Я пытаюсь создать небольшой блог-сайт. У меня есть две таблицы сообщений и комментариев. Каждый пост будет иметь много комментариев. Я генерирую таблицы с помощью этих команд.

rails g scaffold Post title:string body:text author:string
rails g scaffold Comment body:string author:string

Теперь я хочу добавить отношение к модельным классам. Я добавляю has_many :comments к классу Post и belongs_to :post к классу Comment. Однако, когда я пытаюсь вызвать post.comments я получаю сообщение об ошибке во время выполнения, в котором говорится, что SQLException: no such column: comments.post_id. Должен ли я создать миграцию и добавить post_id в поле "Комментарий" или есть способ добиться этого при создании лесов?

4b9b3361

Ответ 1

Scaffold на самом деле обеспечивает способ создания отношений, вы должны использовать тип данных :references

rails g scaffold Comment body:string author:string post:references

Это приведет к миграции для таблицы комментариев с полем post_id и индексом для него. Генератор также добавит belongs_to :post к модели комментариев.

Однако он не будет создавать обратную сторону отношения, поэтому вам нужно будет добавить

has_many :comments

для модели Post. Вам также необходимо добавить вложенную маршрутизацию ресурсов, если это то, что вам нужно, поскольку генератор не может справиться с этим.

Ответ 2

Вы определенно на правильном пути. Если вы добавите столбец post_id при создании фрейма Comment, ваши отношения будут работать (хотя вам все равно нужно добавить has_many :comments и belongs_to :post)

Таким образом, обновленный вызов генератора будет выглядеть следующим образом:

rails g scaffold Comment body:string author:string post_id:integer

Ответ 3

Вы также можете использовать belongs_to следующим образом:

rails g scaffold Comment body:string author:string post:belongs_to