2012-01-10 3 views
5

나는 다음과 같은 한 :Rails 3에서 Ransack과 함께 범위를 사용하려면 어떻게해야합니까? 내 위젯 모델에서

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

일 :

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 
} 

를 이상적으로, 나는 내 컨트롤러에서 나는 그래서, 더듬다의 검색 결과에 대한 필터로이 범위를 사용하고 싶습니다

undefined method `search' for Array:0x007ff9b87a0300

내가 추측하고있어 더듬다가 액티브 관계 객체가 아닌 배열을 찾는 것이이 다음과 같은 오류가 발생합니다. Ransack의 필터로 범위를 사용할 수 있습니까?

+0

실제 질문과 관련이 없지만 범위의 후반부는 'joins (: widget_assignments) .where ('widget_assignments.role_id '=> user.role_ids)'로 쉽게 작성 될 수 있습니다. 또는'user.roles.fetch (: id)'? 나는 틀릴 수 있었다 :) –

답변

8

self.scoped에 대해 self.all을 변경하십시오. all은 배열을 반환합니다.

레일 4 업데이트 : all 이제 범위를 반환합니다.

관련 문제