因为我有模型的唯一键,
如果新记录尝试使用现有的**唯一键**
创建应该失败。
但我希望行为是那个
如果(创建文件)则(更新现有记录)。
begin
Model.create(DATA)
rescue Exception => e
Model.update(DATA)
end
我的代码有任何副作用吗?
答案 0 :(得分:2)
您可以使用find_or_initialize_by
method:
Model.find_or_initialize_by(key: :my_key) do |model|
model.attr_1 = "New attribute 1."
model.attr_2 = "New attribute 2."
model.save
end
另请注意,拯救Exception
通常不被视为一种好习惯。您可能应该正在拯救ActiveRecord::RecordInvalid
或ActiveRecord::ActiveRecordError
,或至少StandardError
。
答案 1 :(得分:0)
答案取决于您的Rails版本。在Rails 4中你会做这样的事情:
ModelName.where(attributes_hash).first_or_create
请参阅文档:http://apidock.com/rails/ActiveRecord/Relation/first_or_create