我有一个Ruby on Rails应用程序,其中包含许可证和可以获得许可的物品,以及列出两者的表格(许可证中有哪些物品以及数量)。类似于购物车中的物品。
其中一些物品将不再营销,但我打算将它们保留在数据库中。因此,我创建了一个软删除,并为模板和关系使用了默认范围。但是,当我尝试使用相关模板更改现有记录时,会出现异常:
以此方式:
其中一些物品将不再营销,但我打算将它们保留在数据库中。因此,我创建了一个软删除,并为模板和关系使用了默认范围。但是,当我尝试使用相关模板更改现有记录时,会出现异常:
ActiveRecord :: ReadOnlyRecord
我的模板看起来像这样:class Item <ActiveRecord :: Base
default_scope {where (deleted: false)}
end
class LicenseItem <ActiveRecord :: Base
belongs_to: license, touch: true
belongs_to: item
end
class License <ActiveRecord :: Base
has_many: license_items,
-> {joins (: item) .where (items: {deleted: false})},
dependent:: destroy
end
以此方式:
pry (main)> License.find (0) .license_items [0] .readonly?
=> true
有没有办法让这个关系不只是读取?
我已经尝试在has_many
作用域的末尾添加readonly(false)
到License
,但没有成功。
joins
时,似乎有一个隐式的只读模式。在Rails 4及以上版本中,似乎已经删除了该模式。但是根据那个问题,readonly(false)
是推荐的方式。很奇怪它对你不起作用。 - Derek Hopper