Ruby on rails CanCan,design,Rails and Backbone.js,问题:更新

Ruby on rails CanCan,design,Rails and Backbone.js,问题:更新,ruby-on-rails,ruby-on-rails-3,devise,backbone.js,cancan,Ruby On Rails,Ruby On Rails 3,Devise,Backbone.js,Cancan,我正在使用Desive和CanCan为后端创建backbone.js前端和Rails 3.0.7 一旦我将load_和authorize_资源添加到我的控制器,它就不再允许我执行更新,并且我也不会从服务器得到任何响应。如果我从控制器中删除load_和authorize_资源,一切都会正常工作 来自我的控制台的信息: 于2011年7月7日星期四15:06:41至7:00开始对127.0.0.1进行PUT/pos/13 PosControllerupdate作为JSON进行处理 参数:{已确认=>n

我正在使用Desive和CanCan为后端创建backbone.js前端和Rails 3.0.7

一旦我将load_和authorize_资源添加到我的控制器,它就不再允许我执行更新,并且我也不会从服务器得到任何响应。如果我从控制器中删除load_和authorize_资源,一切都会正常工作

来自我的控制台的信息:

于2011年7月7日星期四15:06:41至7:00开始对127.0.0.1进行PUT/pos/13

PosControllerupdate作为JSON进行处理

参数:{已确认=>nil,已支付=>nil,需要=>2011年6月30日星期四,金额=>16,id=>13,已批准=>1,用户id=>1,供应商id=>5}

用户加载0.1ms从users.id=1的用户中选择用户。*限制1

采购订单加载0.1ms从位置id=13的位置选择位置*,限制1

角色加载0.1ms选择角色。*从角色内部加入角色上的角色\u用户。id=角色\u用户。角色\u id,其中角色。名称='Admin'和角色\u用户。用户\u id=空限制1

最后一个查询的结尾:roles\u users.user\u id=NULL永远不会返回任何结果,因此不允许我更新资源。我能做些什么来解决这个问题

其他资料:

PosControllerupdate如下所示:

def update
  @po = Po.find(params[:id])
  @po.update_attributes! params
  respond_with @po
end
我用角色来管理能力。My 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

我目前只有一个用户,并且已经给这个用户分配了admin角色。我已经能够通过使用一个不传递PosControllerindex中任何@pos的条件对其进行双重检查,除非当前的_user.role?:管理员。

这可能是设计在AJAX请求上丢失身份验证的问题,请查看详细信息

看起来传递给该能力的当前用户为零。尝试删除load_和authorize_资源,并确保在操作中正确设置了当前_用户

如果这不是问题,请首先确保user.role?:管理员正在为该用户返回true。接下来,尝试Ability.newuser.can?:update,Po.find…,有关详细信息,请参阅


我不明白的是为什么它返回一个空的JSON响应。CanCan从不直接处理响应,它只是在授权失败时引发异常。您是否正在应用程序控制器中使用rescue_捕获此信息?如果是这样,请尝试删除该选项,以确保授权确实失败,并且没有其他内容处理JSON响应。

这可能是Desive在AJAX请求上丢失身份验证的问题,请查看详细信息

看起来传递给该能力的当前用户为零。尝试删除load_和authorize_资源,并确保在操作中正确设置了当前_用户

如果这不是问题,请首先确保user.role?:管理员正在为该用户返回true。接下来,尝试Ability.newuser.can?:update,Po.find…,有关详细信息,请参阅


我不明白的是为什么它返回一个空的JSON响应。CanCan从不直接处理响应,它只是在授权失败时引发异常。您是否正在应用程序控制器中使用rescue_捕获此信息?如果是这样,请尝试删除它,以确保授权确实失败,并且没有其他任何东西在处理JSON响应。

如果服务器没有响应,它是否只是在处理页面而从不响应?或者你的意思是它立即返回而没有内容?如果是,页面的状态如何?是重定向吗?如果是的话,到哪里?@ryanb它将PosControllerupdate作为JSON发送到PosControllerupdate,我得到一个没有内容的200响应。数据库也从未更新过。因为这都是JSON,所以它不会重定向。因为我没有从服务器得到响应,它只是在处理页面而从不响应吗?或者你的意思是它立即返回而没有内容?如果是,页面的状态如何?是重定向吗?如果是的话,到哪里?@ryanb它将PosControllerupdate作为JSON发送到PosControllerupdate,我得到一个没有内容的200响应。数据库也从未更新过。因为这都是JSON,所以不会重定向。谢谢@ryanb。Deave正在丢失身份验证。我想我以前应该注意到这一点。似乎也是这样。角色?没有按应有的方式行事。不管怎样,更新jQueryRails就是解决办法。谢谢@ryanb。Deave正在丢失身份验证。我想我以前应该注意到这一点。似乎也是这样。角色?没有按应有的方式行事。不管怎样,更新jQueryRails是解决方案。