質問

私のウィジェットモデルには、次のことがあります。

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 これでスコープを返します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top