【发布时间】:2014-11-22 10:16:18
【问题描述】:
我使用 Devise 进行身份验证,使用 cancancan 进行授权。cancancan 在某些控制器上运行良好,但在某些屏幕上会抛出未定义的方法错误。
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
【问题讨论】:
-
total_pages是will_paginate的方法,而不是cancancan本身。 -
@blelump 问题出在 cancan 上,因为在该控制器中,cancancan 无法按照 load_and_authorize_resources 方法授权评估资源。所以我们不得不跳过这个索引操作并手动检查每个资源的授权索引。答案已实施并正在发挥作用。
标签: ruby-on-rails ruby devise cancancan