我在我的rails应用程序中使用Cancan + Devise:
当我尝试更新评论记录时会出现问题,我想初始化方法的用户参数总是来nil
即使我已经记录了:
Ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user
unless user.nil?
if user.role.name == "admin"
can :manage, :all
elsif user.role.name == "atendimento"
can :manage, Comment
end
end
end
end
Better_errors
最后它引发了这个错误。
每个人都面临这个问题? 有人可以帮帮我吗?
Rails 3.2.8 设计2.1.0 CanCan 1.6.9 Ruby 1.9.3p385
修改1
CommentsController.rb
class CommentsController < ApplicationController
authorize_resource :only => [:index, :show,:new,:edit, :create,:update,:destroy, :approve, :moderate, :disapprove]
layout "admin"
修改2
嘿伙计们,当控制器收到ajax请求时,CanCan可以很好地摘录..
Comments.js
var request = $.ajax({
url: url_to_request,
type: "PUT",
data: {id : id_to_send, answer : answer_to_send, question : question_to_send },
dataType: "json"
});
配置/ routes.rb中
resources :comments do
member do
put 'approve'
put 'moderate'
put 'disapprove'
end
end
答案 0 :(得分:5)
user
不是user.role
,而是user.role.try(:name)
。
您可以使用role
或确保name
方法始终返回响应current_user
的对象。
修改强>
Cancan在控制器上使用before_filter
方法。如果该方法返回nil,则用户将在您的Ability文件中为nil。
确保在过滤之前在您的Cancan之前运行设计load_and_authorize_resource
(例如调用{{1}})。如果您的用户在Cancan开始尝试授权之前未经过身份验证,则您的用户将为零。