好的,我已经按照 github 上的 railsapps 模板说明,在 CanCan 上盲目地复制了 ryanb 的 railscast(为我的 Event 模型替换了 Comment 变量)。我已经建立了一个新用户,并为其分配了“发起人”角色,并赋予了管理员角色的一部分能力。当我在 Rails 中加载它时,我得到
未定义的方法“角色?” 对于用户:0x08 ...
好的,我正在控制台中向后工作,以重新分配新用户到“赞助商”角色并查看是否有问题。如果你在最后往下看,我看到一些东西似乎坏了,但不确定如何修复它。这是我的能力.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
我的事件.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(资源类型为空)
user_id 是正确的,但“名称”不是“管理员”。我认为它应该拉“赞助商”的名字?
这可能是一个简单的问题,但我猜这个错误分配可能是我问题的根源,为什么上面指出了 events#index 错误。似乎假设 Ability.new 被困在“管理员”上。我在看什么,thanx,山姆