我的政策给了我麻烦。我一直收到错误消息
undefined method `id' for nil:NilClass
以下政策:
def update?
user.present? && current_user.creator?(record, current_user)
end
这是方法user.creator?:
def creator?(wiki, user)
relationships.find_by(wiki_id: wiki.id, user_id: user.id).creator_created
end
Relationships是一个has_many中的连接表,通过Wikis和Users之间的关系。 Wiki和User都不是nil,关系也不应该是。我刚刚在数据库中播放了包含每个Wiki的Relationships记录。当没有用户时,这个政策工作正常,它只是拒绝我放在下面的任何东西。仅当 用户时,换句话说,当我以用户身份登录时,才会出现此错误。所以我不知道哪个类正在读取为nil,哪个id是个问题。
有什么想法吗?
谢谢!
答案 0 :(得分:0)
current_user
可能在策略中不可用,通常是Devise提供的控制器帮助方法。
答案 1 :(得分:0)
根据您发布的内容,这看起来像Pundit的授权。在Pundit中,current_user
不是当前用户,user
是当使用authorize
方法时传递的当前用户(我假设您已定义)作为用户的策略类中的user
,如果不是,则为用户使用已定义的变量。有关详细信息,请阅读Pundit docs。
将current_user
替换为user
,您将不会收到该错误。如果您希望通过授权做一些特别的事情,请发表您想要做的评论。
答案 2 :(得分:0)
我认为我在没有关系记录的例子上称这个政策,所以关系是零。我编辑了我的创作者?方法:
def collaborator?(wiki, user)
if Relationship.exists?(:wiki_id =>wiki.id, :user_id => user.id)
true
else
false
end
end
这似乎有所帮助。感谢您的投入!