2013-04-13 3 views
0

Я новичок в Rails и немного растерялся отношениями has_one и has_many.Использование has_many отношения для сохранения записей

У меня есть две модели - USER и LOCATION.

У каждого ПОЛЬЗОВАТЕЛЯ есть место, а МЕСТОПОЛОЖЕНИЕ может принадлежать многим ПОЛЬЗОВАТЕЛЯМ.

Итак, я создал это так:

class User < ActiveRecord::Base 
    belongs_to :location 
end 

class Location < ActiveRecord::Base 
    has_many :users 
end 

Теперь, когда я хочу, чтобы создать нового пользователя и сохранить место, как я должен это делать? Это так?

@user = User.new 
@user.name = params[:name] 

@loc = Location.new 
@loc.zip = params[:zip] 
@loc.save 

@user.location = @loc 
@user.save 

Это не правильно и не работает для меня. Любая помощь или указатели будут оценены.

Рельсовые книги указывают только, как создать эти ассоциации. Не о том, как сохранить записи с этими ассоциациями.

+1

Она должна быть работа когда вы меняете'@user.loc = loc 'на'@user.location = loc' – onurozgurozkan

+0

Вам нужно сказать, как он терпит неудачу. Что такое сообщение об ошибке? Кроме того, каковы столбцы таблиц? Вы создали 'location_id' в таблице' users'? –

+0

У вас есть location_id как поле пользователя? – rovermicrover

ответ

0

изменение save для save!, чтобы поднять исключение и посмотреть, что не работает для вас.

Альтернативный путь будет

@loc = Location.create!(:zip => params[:zip]) 
@user.create!(:name => params[:name], :location_id => @loc.id) 

вы можете наслаждаться получить что-то вроде params[:users][:name] в качестве параметра, потому что, например, если есть больше атрибутов, чем имя, которое вы можете просто сделать

@user.create(params[:user]) 
Смежные вопросы