2014-11-22 2 views
0

Am использование Завещания для аутентификации и cancancan для authorization.cancancan работают нормально некоторое контроллер, но бросает неопределенную ошибку метода для некоторых экранов ..неопределенного метод `ошибка total_pages' в rails4

assessments_controller.rb

def index  
    @projects = Project.find_by_sql("SELECT project_id, project_name FROM projects WHERE company_id = "+ current_dashboard_user.company_id.to_s + 
           " ORDER BY project_name") 

    getProjectId 

    getResult #get search result 

    respond_to do |format| 
    format.html 
    format.js 
    end  
    end 

    def getResult  
    #Search Result page 
    if (@project_id != nil && @project_id != "") then 
     @assessments = Assessment.find_by_sql("SELECT assess.assessment_id, assess.company_id, assess.project_id, assess.release_cycle_no, 
              assess.assessment_description, DATE_FORMAT(assess.start_date,'%d/%m/%Y') start_date_display, 
              DATE_FORMAT(assess.end_date,'%d/%m/%Y') end_date_display, assess.project_phase_id, pp.project_phase_name, 
              CASE WHEN assess.closed_status = 'Y' THEN 'Closed' ELSE 'Open' END AS closed_status 
              FROM assessments assess, project_phases pp 
              WHERE assess.company_id = " + current_dashboard_user.company_id.to_s + 
              " AND assess.project_id = " + @project_id.to_s + 
              " AND assess.project_phase_id = pp.project_phase_id ORDER BY assess.assessment_id DESC") 

     @assessments = @assessments.paginate(:per_page => 5, :page => params[:page]) 
    end 
    end 

https://gist.github.com/anonymous/9ccee7be3e7fa2df2bca

Мои взгляды. https://gist.github.com/anonymous/272e6cc05e01d526ef0a

ошибка я получил это http://imgur.com/1qyHen1

+0

'total_pages' - это метод' will_paginate', а не 'cancancan'. – blelump

+1

@blelump проблема связана с cancan, потому что в этом контроллере cancancan не может разрешать ресурсы оценок в соответствии с методом load_and_authorize_resources. Поэтому нам пришлось пропустить это действие индекса и вручную проверить индекс авторизации для каждого ресурса. Ответ был выполнен и работает. – Rubyrider

ответ

1

Таким образом, вы должны определить разрешение вручную для указательного действия.

load_and_authorize_resource 
    skip_load_and_authorize_resource :only => [:getProjectId, :getResult, :index] 

    def index  
    @projects = Project.find_by_sql("SELECT project_id, project_name FROM projects WHERE company_id = "+ current_dashboard_user.company_id.to_s + 
            " ORDER BY project_name") 
    authorize! :read, @projects 
    getProjectId 

    getResult #get search result 
    authorize! :read, @assessments 
    respond_to do |format| 
     format.html 
     format.js 
    end  
    end 
+0

Cancan выполняет авторизацию только на действия контроллера, а не на все сторонние методы. Пропуск загрузки ресурса для ': getProjectId:: getResult' здесь не действует. – blelump

+0

Yah эти два действия могут быть удалены. – Rubyrider

Смежные вопросы