1

このエラーが発生します。

未定義のメソッド「recent」 #

私のコードは

ユーザーコントローラー

@users = User.find_by_username(params[:id]).all_following.recent

ユーザーモデル

scope :recent, lambda { |n = 10| order("last_active_at DESC").limit(n) }
4

3 に答える 3

1

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が使用されます。

于 2013-01-21T01:52:28.847 に答える
1

lambda を使用している場合、引数を取る必要がありますか?? 制限が正確にわかっている場合は、ラムダを使用する必要はありません

13.2でこのガイドを見てみて ください http://guides.rubyonrails.org/active_record_querying.html#working-with-scopes

于 2013-01-21T01:37:22.153 に答える
1

宝石のドキュメントからall_followingは配列です。この配列は均一ではない場合もあります。

スコープは、recent実際には で呼び出すことができるメソッドですActiveRecord

残念ながら、この 2 つが一致しないためrecent、 のインスタンスを呼び出すことはできないというエラーが表示されますArray

それが役立つことを願っています。

于 2013-01-21T01:40:01.250 に答える