このエラーが発生します。
未定義のメソッド「recent」 #
私のコードは
ユーザーコントローラー
@users = User.find_by_username(params[:id]).all_following.recent
ユーザーモデル
scope :recent, lambda { |n = 10| order("last_active_at DESC").limit(n) }
このエラーが発生します。
未定義のメソッド「recent」 #
私のコードは
ユーザーコントローラー
@users = User.find_by_username(params[:id]).all_following.recent
ユーザーモデル
scope :recent, lambda { |n = 10| order("last_active_at DESC").limit(n) }
all_followingメソッドは配列を返すため、スコープを使用してこれを行うことはできないと思います。そのため、ユーザーモデルを調べてスコープを見つけようとさえしません。スコープを使用しないもう1つの理由は、スコープは、物を並べ替えるのではなく、再利用したい特定の方法でデータベースからアイテムをフェッチするためのものであるということです。必要な機能を取得するには、次のようにArrayクラスにメソッドを追加します。
class Array
def recent(limit = 10)
self.sort_by { |users| users[:last_active_at] }[0..(limit-1)]
end
end
次に@users = User.find_by_username(params[:id]).all_following.recent(3)
、コントローラーを呼び出して、制限値に必要な任意の値を渡すことができます。のように制限値を@users = User.find_by_username(params[:id]).all_following.recent
省略した場合、デフォルトとして10が使用されます。
lambda を使用している場合、引数を取る必要がありますか?? 制限が正確にわかっている場合は、ラムダを使用する必要はありません
13.2でこのガイドを見てみて ください http://guides.rubyonrails.org/active_record_querying.html#working-with-scopes
宝石のドキュメントからall_following
は配列です。この配列は均一ではない場合もあります。
スコープは、recent
実際には で呼び出すことができるメソッドですActiveRecord
。
残念ながら、この 2 つが一致しないためrecent
、 のインスタンスを呼び出すことはできないというエラーが表示されますArray
。
それが役立つことを願っています。