私はライセンスを持っているRuby on Railsアプリケーションを持っています。ライセンスが付いているアイテムと、その2つをリストしたテーブル(ライセンスにはどのアイテムが入っていますか?ショッピングカート内のアイテムと同様です。Ruby on Railsのスコープとの関連
一部の商品は販売されなくなりますが、データベースに保管する予定です。 soft-deleteを作成し、テンプレートとリレーションシップのデフォルトスコープを使用しました。しかし、私は、関連するテンプレートを使用して、既存のレコードを変更しようとすると、私は例外を取得: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
に追加しようとしました。
これはあなたに少し役立つかもしれません:https://github.com/rails/rails/issues/10615。 Rails 3.xでは、 'join 'を使用すると暗黙の読み取り専用があるように見えます。 Rails 4以降では、これは削除されたようです。しかし、その問題によれば、 'readonly(false)'が推奨される方法です。それはあなたのために働いていない奇妙です。 –
ソフト削除の場合、https://github.com/rubysherpas/paranoia gemは便利な機能を提供します。 –
ありがとう、私はその宝石を見て:) – MZaragoza