【问题标题】:extract attributes values from an activerecord query object in rails 2.3从rails 2.3中的activerecord查询对象中提取属性值
【发布时间】:2013-10-10 13:23:56
【问题描述】:

在我的控制器中,我有一个 @attach 对象,当我检查它时,它的值为

[#<MessageAddlAttachment id: 80, reminder_id: 112, msg_attachment_file_name: "24.png", msg_attachment_content_type: "image/png", msg_attachment_file_size: 272368, created_at: "2013-10-10 12:04:37", updated_at: "2013-10-10 12:04:37">, #<MessageAddlAttachment id: 81, reminder_id: 112, msg_attachment_file_name: "37.png", msg_attachment_content_type: "image/png", msg_attachment_file_size: 333986, created_at: "2013-10-10 12:04:37", updated_at: "2013-10-10 12:04:37">]

所以现在经过一些操作,我需要在这个 MessageAddlAttachment 表中创建一个具有不同 ID 的条目。我怎样才能实现它。我试过 dup 但它会有相同的 ID。请帮忙

【问题讨论】:

    标签: ruby-on-rails paperclip ruby-on-rails-2


    【解决方案1】:

    dup 是您在 rails 4 中的朋友。它会创建一个副本但会删除 id 值:

    u = User.first
    => #<User id: 1, ...>
    u.dup
    => #<User id: nil, ...>
    u.dup.save
       (0.2ms)  begin transaction
    ...
    

    【讨论】:

      【解决方案2】:

      从 Rails 3.2 或 3.1 开始,您想使用 dup。在此之前,您应该改用clone。这将为您提供 id 字段的新值;您可能还需要注意您的 created_at 和 updated_at 字段会发生什么。

      另一个需要注意的问题是,如果您有任何带有验证的日期字段表明它们必须在“今天的日期”之后,它们可能在保存原始记录时有效,但在保存新记录时无效。你如何解决这个问题将取决于你的情况;您可能希望在克隆时完全禁用验证,或调整新记录中的值。

      【讨论】:

      • 我使用了 clone 方法,但是如何避免 created_at 和 updated_at 属性被克隆并使用正确的值保存
      • 在我的情况下,我希望记录具有原始 created_at 值,所以这可能就是您所看到的。如果您希望更新它们,您可能必须将 .created_at 显式设置为 Time.now 并 .save 记录,这应该会为您更新 .updated_at 字段。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      • 2015-02-21
      • 2021-05-16
      • 1970-01-01
      • 2011-01-24
      • 1970-01-01
      相关资源
      最近更新 更多