rails连接表问题与不同的角色(所有者,非所有者)

时间:2016-05-19 16:21:02

标签: ruby-on-rails associations schema

在我的应用中,用户可以在User has_many :productsProduct belongs_to :user时创建产品。现在我希望产品创建者product.user能够邀请其他用户加入产品,但我想让创建者成为唯一可以编辑产品的人。

我想到的其中一个设置就是这个,但我想它不会起作用,因为我不知道如何区分创建的和#34;加入 - 通过邀请"调用user.products时的产品。

User
has_many :products, through: :product_membership
has_many :product_memberships
has_many :products # this is the line I currently have but think it wouldn't
                   # work with the new setup

Product
has_many :users, through: :product_membership
has_many :product_memberships
belongs_to :user # I also have this currently but I'd keep the user_id on the product 
                 # table so I could call product.user and get the creator.

ProductUsers
belongs_to :user
belongs_to :product

Invitation
belongs_to :product
belongs_to :sender, class: "User"
belongs_to :recipient, class: "User"

要解决这个问题,我可以考虑两个解决方案:

  1. 删除我当前拥有的User has_many :products行,只需向user模型添加实例方法:

    def owned_products
      Product.where("user_id = ?", self.id)
    end
    

    我的问题是,我认为它并没有遵循惯例。

  2. 删除我当前拥有的User has_many :products行,并在“ProductUsers”中添加一个布尔列。叫is_owner?。我之前没有尝试过,所以我不确定这是怎么回事。

  3. 解决此问题的最佳解决方案是什么?如果没有这些,请告诉我你的建议。我不想在以后遇到一些问题,因为我的数据库架构搞砸了。

1 个答案:

答案 0 :(得分:0)

您可以向admin表添加creatorProductUsers属性,默认情况下将其设置为false,并为创建者将其设置为true。

编辑:这就是你所说的is_owner? 这对我来说似乎是一个相当不错的解决方案,并且很容易让你找到创建者。

product.product_memberships.where(is_owner?: true)

应该给你创作者