2014-11-22 61 views
0

现在用设计进行验证和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 2014-11-22 12:15:13

+1

@blelump问题在于cancan,因为在该控制器中cancancan无法根据load_and_authorize_resources方法授权评估资源。因此,我们必须跳过此索引操作并手动检查每个资源的授权索引。答案已经实施并正在起作用。 – Rubyrider 2014-11-22 13:12:25

回答

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 2014-11-22 14:53:54

+0

这两个动作可以删除。 – Rubyrider 2014-11-22 14:55:04