Как вы изначально создали эти модели? Вы только что создали файлы модели или использовали генератор моделей rails (который также генерирует миграцию для вас)?
#room.rb
class Room < ActiveRecord::Base
has_many :check_ins
end
#check_in.rb
class CheckIn < ActiveRecord::Base
belongs_to :user
belongs_to :room
end
#user.rb
class User < ActiveRecord::Base
has_one :check_in
has_one :room, :through => :check_in
end
В db / migrations / 34612525162_something_something.rb Вы должны убедиться, что у вас есть миграции, которые настраивают эти таблицы для вас. Самый простой способ сделать это - запустить эту команду в консоли, изменить команды для использования нужных полей, поля * _id необходимы для работы ваших ассоциаций:
rails generate model user name:string email:string otherfield:integer
rails generate model check_in user_id:integer room_id:integer
rails generate model room number:integer
Обратите внимание, что они также будут генерировать файлы модели для вас, так как у вас уже есть эти 3 файла модели, он спросит вас, хотите ли вы перезаписать их или пропустить файлы. Вы можете пропустить их, и это должно быть просто отлично. Если у вас уже были миграции для части данных в этих моделях, вы можете просто добавить поля user_id и room_id в модель check_in, запустив этот генератор вместо :
rails generate migration AddIdsToCheckIn user_id:integer room_id:integer
Для рельсов 2.3.x заменить rails generate
на script/generate
. Затем вы можете проверить ваши миграции, открыв файлы в db/migrate.rb
и изменив их там, если вам нужно. Наконец, запустите миграцию:
rake db:migrate
И это должно сработать для вас. Обратите внимание, что я добавил отношение has_one, :through =>
к пользователю - это так, что вы можете сделать @user.room
без необходимости создавать 3 цепочки: @user.check_in.room