Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 基于现有activerecord对象保存新行,将id设置为nil';行不通_Ruby On Rails - Fatal编程技术网

Ruby on rails 基于现有activerecord对象保存新行,将id设置为nil';行不通

Ruby on rails 基于现有activerecord对象保存新行,将id设置为nil';行不通,ruby-on-rails,Ruby On Rails,我试图保存2行,第2行基于第1行: user = User.new(....) user.save! user.id = nil user.name = "different name" user.save! 这不会创建第二行,我应该怎么做 user = User.new( :name => 'whatever') user.save! user = User.new( :name => 'other name') user.save! 或者更好,只要做: User.cr

我试图保存2行,第2行基于第1行:

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

user.id = nil
user.name = "different name"
user.save!
这不会创建第二行,我应该怎么做

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 }

问题是Rails认为您正在尝试更改已保存到数据库中的实例,而不是创建一个新实例。您要做的是克隆原始记录,它应该可以工作。这是你的电话号码


我不知道克隆人的事。回答得好!从rails 4开始,这不再是事实。克隆将更改初始对象,而不是创建新实例<代码>#第一个实例user=user.create(…params…)#新实例(无需设置id=nil)user2=user.New(user.attributes)user2.name=“其他名称”user2.save或直接使用
user2=user.dup
这会将id设置为nil这会为我覆盖原始记录。Cristi建议使用user2=user.dup,然后使用user2.save!为我正确创建了重复记录。使用Rails 3。
# First instance
user = User.create(...params...)

# New instance (no need to set id = nil)
user2 = user.clone
user2.name = "different name"
user2.save!