2012-01-10 8 views
5

RansackでRails 3でスコープを使用するにはどうすればよいですか?私は、次のしている私のウィジェットモデルで

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 
} 

理想的には、私は私のコントローラで私が持っているので、掻き回すの検索結果のフィルタとして、このスコープを使用したいと思います:

def index 
    @q = Widget.accessible_to(current_user).search(params[:q]) 
    @widgets = @q.result.order('created_at DESC') 
end 

行いますこれは次のエラーを生成します:

undefined method `search' for Array:0x007ff9b87a0300

私はRansackがActiveRecord関係オブジェクトを探しており、配列ではないと推測しています。とにかくRansackのフィル​​ターとしてスコープを使用できるのですか?

+0

あなたの実際の質問には関係ありませんが、スコープの後半はおそらく 'joins(:widget_assignments).where( 'widget_assignments.role_id' => user.role_ids)'と書かれていますか?または 'user.roles.fetch(:id)'?私は間違っている可能性が:) –

答えて

8

self.allself.scopedに変更してください。 allは配列を返します。

Rails 4のアップデート:allはスコープを返すようになりました。

関連する問題