Сохранить новую строку на основе существующего объекта activerecord, установив id в nil, не сработало - PullRequest
4 голосов
/ 06 марта 2011

Я пытаюсь сохранить 2 строки, 2-я строка основана на 1-й строке:

user = User.new(....)
user.save!

user.id = nil
user.name = "different name"
user.save!

Это не создает 2-ю строку, что мне делать?

Ответы [ 2 ]

3 голосов
/ 06 марта 2011

Проблема в том, что Rails думает, что вы пытаетесь изменить экземпляр, который уже сохранен в базе данных, а не создавать новый.Что вы хотите сделать, это клонировать оригинальную запись, и она должна работать.Вот Rails документы по использованию клона .

# First instance
user = User.create(...params...)

# New instance (no need to set id = nil)
user2 = user.clone
user2.name = "different name"
user2.save!
1 голос
/ 06 марта 2011
user = User.new( :name => 'whatever')
user.save!

user = User.new( :name => 'other name')  
user.save!

или даже лучше, просто выполните:

User.create( :name => 'first user name' )
User.create( :name => 'second user name' )

... для столько пользователей, сколько вам нужно.

Если вы хотите повторить условия для всех этихкроме имени, вы можете просто сохранить ваши повторяющиеся параметры в переменной экземпляра и установить неповторяющиеся атрибуты при каждом создании.Что-то вроде:

attributes = { :gender => :male, :age => 18 }
User.create( :name=> 'John', attributes }
User.create( :name=> 'Fred', attributes }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...