2014-11-26 2 views
1

내가 모델 call.rb에서 calls_controller.rb캉캉 및 액티브 협회

load_and_authorize_resource :store 
load_and_authorize_resource :call, :through => :store 

def index 
    @calls = Call.accessible_by(current_ability, :index) 
end 

에서 내 Ability.rb

can :index, :calls, :store => { area_id: user.area_id } 

에 다음 줄을

belongs_to :store 

그러나 때 보기에서 @calls에 액세스하려고하는데 다음 SQL 오류가 발생합니다.

Mysql::Error: Unknown column 'store.area_id' in 'where clause': SELECT `calls`.* FROM `calls` INNER JOIN `stores` ON `stores`.`id` = `calls`.`store_id` WHERE `store`.`area_id` = 4 LIMIT 20 OFFSET 0 

SQL 쿼리에 "WHERE stores"이 있어야하기 때문입니다. . area_id = 4 "이 캉캉에 문제가 아니면 내가 뭔가 잘못 설정을해야합니까 내가 참고로 캉캉 2.0을 사용하고

답변

0

는 능력 변경해보십시오 :?. 당신은을 제한하는 경우

can :index, Call, :store => { area_id: user.area_id } 
+0

흥미 롭습니다. 그건 오류가 아니지만 사용자가 영역 4에있는 호출뿐만 아니라 모든 호출을 볼 수 있습니다. 여기에 새 프로젝트를 구축 중이므로 Ability.rb 또는 afaik를 방해 할 수있는 모든 컨트롤러에는 거의 기능이 없습니다. – thenapking

+0

구문이 작동하지 않을 것이라고 확신합니다. 비교 : can [: read, : index], : calls, : id => 55866, [: read, : index], Call, : id => 55866. 후자는 모든 호출을 볼 수있게합니다. one – thenapking

+0

무엇이 잘못 되었는가 잘 모르겠지만 cancanancan을 시도해보십시오. 왜냐하면'cancan' 지원이 잠시 중단 되었기 때문입니다. 이것은 오래된 문제 일 수 있습니다! – Nimir

0

을 사용자는이 상태에서 배열을 전달할 수있는 그런

if !user.area_id.nil? and user.area_id != 0 then 
    user_stores = Store.where(:area_id => user.area_id) 
    end 

볼 수 저장

can [:read, :index], :stores, :id => user_stores 
    can [:read, :index, :create, :update], [:calls, :change_requests], :store_id => user_stores 

필요에 따라 작동합니다.