私はDeviseとCanCanを使ってbackbone.jsフロントエンドとRails 3.0.7バックエンドを作成しています。CanCan、Devise、Rails、Backbone.js、with with issue:update
コントローラにload_and_authorize_resource
を追加するとすぐにupdate
を実行できなくなり、サーバーからの応答が得られなくなります。コントローラからload_and_authorize_resource
を削除すると、すべて正常に動作します。
私のコンソールからの情報:
はJSONとしてPosController番号の更新によって処理木7月7日に127.0.0.1のために15時06分41秒-0700 2011
をPUT "/ POS/13" を開始しました
パラメータ:{"確認済み" =>なし、 "支払済み" =>なし、 "必要" => 2011年6月30日、 "金額" => 16、 "id" => "13"、 "承認済み"=> 1、" user_id "=> 1、" vendor_id "=> 5}
ユーザ負荷(0.1ms)SELECT" users "。* FROM" users "ここで、 "ユーザ"、 "ID" = 1 LIMIT 1
ポーロード(0.1ms)を選択し、 "POS"。* "POS" FROM "POS"。 "ID" = 13 LIMIT 1
役割ロード(0.1ms)SELECT "roles"。* FROM "roles" INNER JOIN "roles_users" ON "roles" .id = "roles_users" .role_id "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
。
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
私は現在、唯一のユーザーを持っている、と持っている私のability.rbは次のようになりますこのユーザーにロールの管理者を与えます。私は、current_user.role? :admin
を除いて、PosController#index
に何らかの@posを渡さないために条件を使ってこれを再確認することができました。
「サーバーからの応答がありません」というのは、ページを処理しているだけで、応答しないということですか?それとも、内容がなくても即座に返ってくるということですか?もしそうなら、ページの状態はどうですか?それはリダイレクトですか?もしそうなら、どこに? – ryanb
@ryanb PosController#updateへのPUTをJSONとして実行し、内容のない200応答を取得します。データベースは決して更新されません。これはすべてJSONなので、リダイレクトされません。 – joshvermaire