如何解决Rails:assign_attributes 由于属性名称重复而失败
我有一个与数据库表 orders 相关的 Order 模型,其中包含 pay_type:integer 列,但后来在 添加了 pay_types 表,并将 Order 模型修改为如下所示:
class Order < ApplicationRecord
belongs_to :pay_type
...
end
这意味着现在 Order 模型有 2 个名为 pay_type 的属性。我仍然可以使用 read_attribute 方法读取与表列相关的内容:
order = Order.first
order.pay_type # nil
order.read_attribute(:pay_type) # 1
但是当我尝试使用 assign_attributes 方法分配给后者时:
order.assign_attributes(pay_type: 2)
我收到以下错误:
ActiveRecord::AssociationTypeMismatch (PayType(#14340) expected,got 2 which is an instance of Integer(#5000))
我知道我可以像这样更改 Order 模型中 pay_type 属性的名称:
belongs_to pay_type_something,class_name: :PayType
重复就会消失,但我只想知道:有没有办法在不更改任何名称的情况下为我的第一个 pay_type 属性赋值?
解决方法
你可以试试 []=
或 write_attribute
。
order[:pay_type] = 2 # or
order.write_attribute(:pay_type,2)
但是这些方法受到保护,限制了它们的用例。正如您已经注意到的那样,最好重命名属性或关联。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。