ここには 2 つの潜在的なアプローチがあります。最も簡単な方法は、ハッシュを に送信するだけでなく、コントローラーでハッシュをマージすることupdate_attributes
です。
guided_steps = params[:user].delete(:guided_steps) || {}
@user.guided_steps = (@user.guided_steps || {}).merge(guided_steps)
@user.update_attributes(params[:user])
もう1つは、本当に自動にしたい場合はguided_steps
、User
モデルでライターメソッドを再定義することです:
class User < ActiveRecord::Base
...
def guided_steps=(new_steps)
gs = self.guided_steps || {}
gs = gs.merge(new_steps || {})
write_attribute(:guided_steps, gs)
end
...
end
これにより@user.update_attributes(params[:user])
、コントローラーを呼び出すと、新しいコントローラーguided_steps
が古いコントローラーとマージされるようになります。このアプローチの潜在的な欠点の 1 つはguided_steps=
、以前よりも直感的に機能しなくなることです。たとえば@user.guided_steps = {}
、ハッシュはクリアされません。したがって、このアプローチの長所と短所のバランスを取るのはあなた次第です。