こんにちは!kossyです!
さて、今回は、Railsでビューやコントローラに書きがちなロジックをモデルに移す方法について、
ブログに残してみたいと思います。
環境
Rails 5.2.3
Ruby 2.5.1
MacOS Mojave
値があったら表示するというロジックをモデルに移す
例えば、Userモデルがnameという属性を持っているとします。
で、view側でnameを表示する際に、値があれば表示するというコード
- if user.name.present?
= user.name
というコードが書いてあるとします。
これでもいい気がしますが、他の箇所でもnameを表示するように改修する際に、何度も同じロジックを書く羽目になります。
なので、モデルに移してみましょう。
app/models/user.rb class User < ApplicationRecord def has_name? name.present? end end
has_nameというインスタンスメソッドを定義しました。
「name」はUserモデルの属性で、メソッド内ではnameとするだけで参照できます。
present?メソッドでnameを持っているかどうか(bool値)を返しています。
これをビューで使いましょう。
- if user.has_name?
= user.name
あまり変わってないような気もしますが、名前の有無で処理を分岐させることがある場合、このメソッドが使いまわせます。
今回は簡単な例でしたが、ビューやコントローラをダイエットさせるためにも、
なるべくモデルにロジックを集めるようにしましょう。
そうするとすぐモデルがデブってくるんですけどね、、、笑