在我的应用中,用户可以在User has_many :products
和Product 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"
要解决这个问题,我可以考虑两个解决方案:
删除我当前拥有的User has_many :products
行,只需向user
模型添加实例方法:
def owned_products
Product.where("user_id = ?", self.id)
end
我的问题是,我认为它并没有遵循惯例。
删除我当前拥有的User has_many :products
行,并在“ProductUsers”中添加一个布尔列。叫is_owner?
。我之前没有尝试过,所以我不确定这是怎么回事。
解决此问题的最佳解决方案是什么?如果没有这些,请告诉我你的建议。我不想在以后遇到一些问题,因为我的数据库架构搞砸了。
答案 0 :(得分:0)
您可以向admin
表添加creator
或ProductUsers
属性,默认情况下将其设置为false,并为创建者将其设置为true。
编辑:这就是你所说的is_owner?
这对我来说似乎是一个相当不错的解决方案,并且很容易让你找到创建者。
product.product_memberships.where(is_owner?: true)
应该给你创作者