Важная вещь, которую нужно понять, - это соглашение, по которому Rails реализует отношения, используя ActiveRecord.В книге много символов, и каждый символ принадлежит книге, поэтому:
class Book < ActiveRecordBase
has_many :characters
end
class Character < ActiveRecordBase
belongs_to :book
end
Rails теперь предполагает, что таблица characters
будет иметь внешний ключ с именем book_id
, который относится к books
Таблица.Чтобы создать персонажа, принадлежащего книге:
@book = Book.new(:name=>"Book name")
@character = @book.characters.build(:name=>"Character name")
Теперь, когда @book
сохранено (при условии, что действительны @book
и @character
), будет создана строка в обоих books
и таблицы characters
со строкой символов, связанной через book_id
.
Чтобы показать, что символ также принадлежит пользователю, вы можете добавить это отношение к модели символов:
class Character < ActiveRecordBase
belongs_to :book
belongs_to :user
end
Таким образом, Rails теперь ожидает, что characters
также будет иметь внешний ключ с именем user_id
, который указывает на таблицу users
(для которой также требуется модель User
).Чтобы указать пользователя при создании символа:
@book = Book.new(:name=>"Book name")
@character = @book.characters.build(:name=>"Character name",:user=>current_user)
Вы также можете назначить внешний ключ, вызвав соответствующий метод объекта:
@character.user = current_user
Это все работает, потому что следуетСоглашения Rails для именования моделей и таблиц.Вы можете отказаться от этих соглашений, но вам будет труднее изучать Rails, если вы это сделаете.