Rails 3でRansackでスコープを使用するにはどうすればよいですか?
-
26-10-2019 - |
質問
私のウィジェットモデルには、次のことがあります。
scope :accessible_to, lambda { |user|
if user.has_role?('admin')
self.all
else
roles = user.roles
role_ids = []
roles.each { |r| role_ids << r.id }
self.joins(:widget_assignments).where('widget_assignments.role_id' => role_ids)
end
}
理想的には、この範囲をRansackの検索結果のフィルターとして使用したいので、コントローラーには以下があります。
def index
@q = Widget.accessible_to(current_user).search(params[:q])
@widgets = @q.result.order('created_at DESC')
end
これを行うと、次のエラーが生成されます。
未定義のメソッドアレイの「検索」:0x007ff9b87a0300
Ransackは、配列ではなくActiverCord関係オブジェクトを探していると推測しています。とにかく、自分のスコープをランサックのフィルターとして使用できることはありますか?
解決
変更 self.all
為に self.scoped
. all
配列を返します。
Rails 4の更新: all
これでスコープを返します。
所属していません StackOverflow