ruby-on-rails - 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)
但是这些方法受到保护,这限制了它们的用例。正如您已经注意到的那样,最好重命名属性或关联。
推荐阅读
- java - 如何列出所有默认音乐播放器并打开一个
- c# - 如何让 Prism 报告它捕获的异常?
- javascript - 如何更新 Django 表单中的隐藏字段
- azure - 在 WebApp 中托管的 .Net core 2.1 MVC 中的推送通知
- google-chrome - 在 chrome 扩展中使用 DOMFormHasPassword 和 DOMInputPasswordAdded 事件
- reactjs - 从反应原生导航返回给我在 this.props.navigation.state.params.filePath 中未定义
- python - 如何在 Python 中可视化集群数据?
- jquery - 一个按钮做两个操作
- zend-framework - Doctrine ORM zend framework entitymanager findby multiple conditions
- git - 从分散在不同位置的文件创建 Git 存储库