前提・実現したいこと
controllerがfat化しているため、リファクタリングを行うべく、「order(created_at: :desc)」という記述をモデルの中にscopeとして定義し直して、それをcontrollerから呼び出したいのですが、以下のエラーが発生してしまいます。
発生している問題・エラーメッセージ
NoMethodError in UsersController#show undefined method `recent' for #<Post::ActiveRecord_Relation:0x00007f16a00ee670>
該当のソースコード
users_controller.rb
controller
1 def show 2 @posts = Post.with_attached_images.recent.where(user_id: @user.id).page(params[:page]) 3 end
user.rb
model
1class User < ApplicationRecord 2 scope :recent, -> { order(created_at: :desc) } 3end
試したこと
以下のようにインスタンスメソッドとして定義しなおしてみましたが、効果なしでした。
user.rb
model
1class User < ApplicationRecord 2 def self.recent 3 order(created_at: :desc) 4 end 5end
補足情報(FW/ツールのバージョンなど)
Ruby 2.5.1
Ruby on Rails 5.2.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。