題名通りです。
Railsのattr_accessorに、変数をシンボルで定義できますが、例えば一つのメソッド内でしかその変数を使わないのにattr_accessorに定義するというのは、設計的にどうなのかという質問です。
例えば、
Userインスタンスがupdateされたときに、nameカラムだけが更新されたかどうかをコントローラーで判定し、それによってリダイレクト先を変えたいとします。
まずbefore_updateにchanged メソッドを用意しようとしました。
class UsersController def methodA user.update end end
と
class User before_update :update_only_name? def update_only_name? self.changed == ['name'] end end
です。
しかし、このままでは、update_only_name?の返り値が取れず、controllerで判定できません。
なので、attr_accessorを用意し、
class User attr_accessor :update_only_name before_update :update_only_name? def update_only_name? if self.changed == ['name'] update_only_name = true end end end
にして、コントローラーで
class UsersController def methodA user.update if user.update_only_name == true redirect_to :root else redirect_to :other_path end end end
にできます。
ですが、update_only_nameはこの機能のためだけに作られる変数であり、Userモデルの他の部分では使われない可能性が高いです。
この実装はクリーンだと思いますか?
他に方法はありますでしょうか。
何卒宜しくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/13 03:41