Ruby on rails 基于现有activerecord对象保存新行,将id设置为nil';行不通
我试图保存2行,第2行基于第1行: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
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!