joins
をARelスコープで使用すると、結果は読み取り専用になります。つまり、取得したレコードは更新できません。結果を読み取り専用にしたくない場合は、readonly(false)
をスコープにチェーンするだけです(例:なぜ結合を使用するとARelスコープが読み取り専用になるのですか?
User.joins(:orders).where(:orders => { :state => 'completed' }).readonly(false)
しかし、私は、デフォルトで参加し、スコープが読み取り専用されている理由があることが推測しています。結果を読み取り専用に設定する理由は何ですか?
私の知る限り見ることができるように、 'SELECT'クエリのみユーザ属性を返します - それは' SELECTユーザーをやっているので、*ない*オーダー属性を。* FROM ... '。返されるActiveRecordオブジェクトには、理解できる限り順序属性は含まれてはいけません –
私は元のモデルのコンテンツを返すだけです。デフォルトスコープでの結合を使用するのが難しくなります。 (たとえば、Orderが "非アクティブ"の場合、order_linesがデフォルトで返されないようにします)したがって、OrderLine default_scope {join(:order)}とOrder default_scope {where(アクティブ:true)}。 – TJChambers