我正在使用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