我正在使用Devise和CanCan创建一个backbone.js前端和Rails 3.0.7后端。CanCan,Devise,Rails和Backbone.js,问题与更新
一旦我将load_and_authorize_resource
添加到我的控制器,它不再允许我执行update
并且我没有收到服务器的响应。如果我从控制器中删除load_and_authorize_resource
,则一切正常。从我的控制台
信息:
开始在星期四七月PUT “/ POS/13” 为127.0.0.1 07 15点06分41秒-0700 2011
处理由PosController#更新为JSON
参数:{“confirmed”=> nil,“paid”=> nil,“needed”=> Thu,2011年6月30日,“amount”=> 16,“id”=>“13” “=> 1,”user_id“=> 1,”vendor_id“=> 5}
用户负载(0.1ms)SELECT”users“。* FROM”users“ WHERE “用户”, “ID”= 1 LIMIT 1
宝负荷(0.1毫秒)选择 “正”。* FROM “POS” WHERE “POS”。 “ID”= 13 LIMIT 1
作用负荷(0.1ms)SELECT“roles”* FROM“roles”INNER JOIN“roles_users”ON“roles”.id =“roles_users”.role_id WHERE“roles”。“name”='Admin'AND(“roles_users”.user_id = NULL)LIMIT 1
最后一个查询的结尾:"roles_users".user_id = NULL
永远不会返回任何结果,并且不会让我更新资源。我能做些什么来解决这个问题?
其他信息:
PosController#update
看起来是这样的:
def update
@po = Po.find(params[:id])
@po.update_attributes! params
respond_with @po
end
我用角色来管理的能力。我ability.rb样子:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.role? :admin
can :manage, :all
end
end
end
User.rb包含:
def role?(role)
return !!self.roles.find_by_name(role.to_s.camelize)
end
角色从UsersHaveAndBelongToManyRoles移民获得:
class UsersHaveAndBelongToManyRoles < ActiveRecord::Migration
def self.up
create_table :roles_users, :id => false do |t|
t.references :role, :user
end
end
def self.down
drop_table :roles_users
end
end
我现在只有一个用户,并有给这个用户的角色管理员。我已经能够通过使用条件来检查这一点,除非current_user.role? :admin
,否则不会在PosController#index
中传递任何@pos。
通过“我没有得到服务器的回应”,它只是处理页面,从不回应?或者你的意思是它没有内容即时返回?如果是这样,页面的状态如何?它是重定向吗?如果是这样,到哪里? – ryanb
@ryanb它将PosController#更新为JSON,并且我得到了一个没有内容的200响应。数据库从不更新。由于这是全部JSON,它不会重定向。 – joshvermaire