Railsでビューからモデルにロジックを移す

こんにちは!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

あまり変わってないような気もしますが、名前の有無で処理を分岐させることがある場合、このメソッドが使いまわせます。



今回は簡単な例でしたが、ビューやコントローラをダイエットさせるためにも、
なるべくモデルにロジックを集めるようにしましょう。




そうするとすぐモデルがデブってくるんですけどね、、、笑