2017-05-31 4 views
0

したがって、readonly?メソッドでは、アクティブレコードクラスでいくつかの問題があります。 joinsを呼び出してフェッチされたものが読み取り専用に設定されていることが表示され、このエラーに例えばRuby on Rails: 'joins'で選択されたものはすべて読み取り専用です

ActiveRecord::ReadOnlyRecord: ActiveRecord::ReadOnlyRecord 

をスロー:

# fine 
User.first.readonly? 
User.first.save 
# not fine 
User.joins(:memberships).first.readonly? 
# false 
User.joins(:memberships).first.save 
# ActiveRecord::ReadOnlyRecord 

これがロードされたレコード」のためにfalseに設定されますRails documentationによると、ピギーバック属性との結合を介して。

私が知っている限り、ここにはピギーバック属性は含まれていません。

私はこの制限を強制的に回避することができますが、私はシステムを不必要にハッキングしているように感じます。

user = User.joins(:memberships).first 
User.instance_variable_set(:@readonly, false) 
user.save 

誰もが読取り専用アイテムを返す理由を知っていますか?これを防ぐことはできますか? (私は関連するオブジェクトから任意の属性を選択しようとしていません)。

私はRailsのバージョン3.2.22.5にルビーを使用しています、それはこのようになりますがRailsの以前のバージョン3.

+0

FWIW、Rails 3.2は5歳以上です。それが解放されたとき、Siriはまったく新しいものだった。金正日はまだ北朝鮮の頭であり、Lyftはまだ立ち上げていなかった。これはもはやRailsチームによってサポートされなくなり、もはや安全であるとはみなされなくなりました。新しいバージョンのRailsでこの動作が引き続き発生する場合は、更新するか、新しい質問をしてください。 – coreyward

+0

@coreywardあなたはその情報を提供できたことをとてもうれしく思っています。私は洞窟に住んでいるので、私はそれのいずれかについての手がかりを持っていませんでした。 – AJFaraday

+0

ああ、あなたも[これはここに修正されました](https://github.com/rails/rails/pull/10769)に気づいています。他の人が自分の時間を寄付してくれたため、無料でダウンロードできますあなたのためにそれを解決するには、ダウンロードして使用するだけです。しかし、ちょっと、皮肉なことを続けて、私たちは*あなたのためにすべてをやっていないための変態者だと主張する。 – coreyward

答えて

0

から行動の変化は、それが良いでしょう、などが代わりに参加してみてくださいされていて、もっと早く。

User.include(:memberships).first 
関連する問題