通过关系有许多人的权威政策范围


满目山河
2025-03-18 09:14:58 (3天前)
  1. 有一个冗长的scope.joins条件


政策
</跨度>
我的Wiki索引视图的范围(检查用户状态),根据角色为current_user提供wiki列表的子集。

它继续吐出“合作”上的“合作”。“wiki_id”=“wikis”。“id”WHERE(hide =’f’或user_id = 2或collaborations.user_id = 2)

这是

政策
</跨度>

class WikiPolicy&lt; ApplicationPolicy

#什么是

2 条回复
  1. 0# Coolkid | 2019-08-31 10-32



    这是错误消息中最有价值的部分:




    1. SQLite3::SQLException: ambiguous column name: user_id

    2. </code>


    当SQL结果集具有多个具有相同名称的列时,可能会发生模糊列名称错误。在这种情况下,列是

    user_id






    user_id

    列位于wiki表和协作表中。这两个表都在SQL查询中使用。



    这是导致问题的SQL代码段:



    1.   # DB can't figure out which table "user_id = 2" refers to:
    2. WHERE (hide = f or user_id = 2 or collaborations.user_id = 2)

    3. </code>


    我们需要在其上指定一个表名前缀

    user_id

    柱。



    为此,请尝试更改此行

    WikiPolicy

    从:




    1. scope.joins(:collaborations)
      .where(“hide = :hide or user_id = :owner_id or collaborations.user_id = :collaborator_id”, {hide: false, owner_id: user.id, collaborator_id: user.id})

    2. </code>


    至:




    1. scope.joins(:collaborations)
      .where(“hide = :hide or wikis.user_id = :owner_id or collaborations.user_id = :collaborator_id”, {hide: false, owner_id: user.id, collaborator_id: user.id})

    2. </code>

登录 后才能参与评论