OK、私は github の railsapps テンプレートの指示に従い、CanCan に ryanb の railscast を惜しみなくコピーしました (私の Event モデルの Comment 変数を交換しました)。新しいユーザーを作成し、管理者の役割に与えられた能力のサブセットを持つ「スポンサー」の役割を割り当てました。Railsにロードすると、
未定義のメソッド「ロール?」ユーザーの場合:0x08 ...
OK、コンソール内で逆方向に作業して、「スポンサー」ロールへの新しいユーザーの割り当てをやり直して、何かが壊れていないかどうかを確認しています。最後に見下ろすと、壊れているように見えますが、それを修正する方法がわからないものがあります. これが私の能力です.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= Us # guest user (not logged in)
if user.has_role? :admin
can :manage, :all
else
can :read, :all
end
if user.role? :sponsor
can :create, Event
can :read, Event
can :update, Event do |event|
event.try(:user) == user
end
else
can :read, :all
end
end
end
私のevent.rb:
resourcify
belongs_to :school
学校has_many events
、has_and_belongs_to_many_users
そしてbelongs_to :event
。コンソールで、正しい名前、school_id、メールなどで new_user を作成しました。これは期待どおりに機能しました。そして私は・・・それから私は:
user.add_role "sponsor"
ユーザー ID がスポンサーのロール ID と並んでいることがわかるので、これはうまくいきました。次のステップは、私の問題が始まると思うところです。
ability = Ability.new(new_user)
これにより、次の結果が得られます。
SELECT COUNT(*) FROM "roles" INNER JOIN "users_roles" ON "roles"."id" = "users_roles"."role_id" WHERE "users_roles"."user_id" = 5 AND (((name = 'admin') AND (resource_type IS NULL)
user_id は正しいですが、「名前」は「admin」ではありません。「スポンサー」の名前を引っ張るべきだと思いますか?
これは簡単な質問かもしれませんが、この誤った割り当てが、上記の events#index エラーが発生する理由に関する私の問題の根源であると推測しています。Ability.new が「admin」でスタックしていると想定しているようです。私は何を見落としていますか、ありがとう、サム