簡體   English   中英

策略錯誤:nil:nilClass的未定義方法ID

[英]Policy error: undefined method id for nil:nilClass

我有一個給我帶來麻煩的政策。 我不斷收到錯誤消息

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

關系是通過Wiki和用戶之間的關系在has_many中的聯接表。 Wiki和User都不為零,Relationships也不應為零。 我剛剛為數據庫添加了種子,以包括每個Wiki的“關系”記錄。 如果沒有用戶,則此策略可以正常工作,它只是拒絕我輸入的內容。 只有當用戶,換句話說,當我登錄的用戶會出現此錯誤。 所以我只是不知道哪個類讀為nil,哪個id是個問題。

有什么想法嗎?

謝謝!

該策略中可能沒有current_user ,這通常是Devise提供的控制器幫助器方法。

從您發布的內容來看,這就像授權的Pundit。 在權威人士, current_user是不是當前用戶, user 因為它使用時穿過當前用戶authorize方法(我假設你定義user在策略類作為用戶,如果不是,則使用定義的變量用戶)。 閱讀Pundit文檔以獲取更多信息。

user替換current_user ,您不會收到該錯誤。 如果您想對授權做一些特殊的事情,請發表您要做的事情的評論。

我想我在沒有關聯記錄的示例上調用該策略,因此關聯為零。 我已經編輯過我的創作者? 方法:

def collaborator?(wiki, user)
    if Relationship.exists?(:wiki_id =>wiki.id, :user_id => user.id)
        true
    else
        false
    end
end

這似乎有所幫助。 謝謝您的意見!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2025 STACKOOM.COM