ruby-on-rails – 与Ruby on Rails中的范围关联
发布时间:2020-12-17 02:57:11 所属栏目:百科 来源:网络整理
导读:我有一个 Ruby on Rails应用程序,其中我有许可证,可以获得许可的项目以及列出这两个项目的表格(许可证中存在哪些数量的项目?).类似于购物车中的物品. 有些项目将不再销售,但我打算将它们保存在数据库中.然后,我创建了一个软删除,并使用了模板和关系的默认范
我有一个
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,但没有成功. 解决方法
根据
this thread in GitHub,这是一个Rails 4.0错误,已在4.0.1版中修复.更新您的Rails,您可以在您的范围中包含readonly(false),它将起作用:
class License <ActiveRecord :: Base has_many: license_items,-> {joins (: item) .where (items: {deleted: false}). readonly (false)},dependent:: destroy end 要更新Rails版本,请编辑Gemfile,然后运行bundle update. 在后一种情况下,如果无法更新Rails版本,则可以将readonly:false选项传递给find(不推荐)方法: License.find (1) .license_items.find (1,readonly: false) .update_attributes (amount: 5) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |