【问题标题】:Creating a new object from another object's attributes in rails从rails中另一个对象的属性创建一个新对象
【发布时间】:2018-07-16 08:13:10
【问题描述】:

在介绍strong params 之前,它运行良好。 因此,在使用new 创建新对象并传递属性时,id 被设置为nil

但是现在,当我从现有对象创建一个新对象 obj2 时,obj1 的属性,

obj1 的id(主键)也被复制到obj2。

喜欢,

obj2 = Post.new obj1.attributes

所以,当我尝试保存它时出现问题,

obj2.save

出现ActiveRecord::RecordNotUnique 错误。由于两个对象具有相同的 id。

我有几个具有相同用例的模型,所以如果我使用dupexcept,我必须在每种情况下添加相同的。

【问题讨论】:

标签: ruby-on-rails ruby oop rails-activerecord


【解决方案1】:

只需删除id:

obj2 = Post.new obj1.attributes.except('id')

或者,使用#dup:

obj2 = obj1.dup

【讨论】:

  • 谢谢。但我确实这样做了。但我不想到处添加except。这不是创建新对象的新方法的属性吗?
  • @MukarramAli 查看#dup
【解决方案2】:

如果你想在一个新对象中复制你的属性,你必须使用以下(特定于 ActiveRecord):

obj2 = obj1.dup

这使得id(created|updated)_(at|on) 不会被复制。还要记住,父关联在新对象中保持原样。

了解更多https://apidock.com/rails/ActiveRecord/Core/dup

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    相关资源
    最近更新 更多