読者です 読者をやめる 読者になる 読者になる

railsのモデルにorderの処理を記述する

rails

コントローラーにorder(created_at: :desc)が多くなると、すごく可読性が悪くなるなって感じました。

よく、こういう感じなことが起こると思います。

@user = current_user
@posts = @user.posts.order(created_at: :desc).page(params[:page])

ここからさらにタグがあるので、includeをして・・・ってなるとこうなります。

@user = current_user
@posts = @user.posts.order(created_at: :desc).page(params[:page]).includes(:tags)

可読性が悪くなります。

並び順はモデル側の処理なので、モデル側で記述してみます。

class User < ActiveRecord::Base
  has_many :posts, -> { order('created_at DESC') }, dependent: :destroy
end

ラムダ式で、すぐにorderを処理しろという風に書きます。

これでorderを書かずによくなります。

@user = current_user
@posts = @user.posts.page(params[:page]).includes(:tags)

余計な情報がなくなったと思います。 こういう書き方もあるよーって方がいたら教えて下さい。