Rails ActiveRecord关联“has_many,每个都有__”

时间:2015-01-24 16:05:21

标签: ruby-on-rails activerecord rails-activerecord

我有一个关于ActiveRecord关联的问题,我试图拥有User模型,其中每个用户可以拥有许多Product s(然后属于该特定用户)。但是,在展示产品之前,它需要一个活动权限,因此我想在构造中添加第三个模型Permission

我制定了以下句子,使思维过程更容易: 一个User has_many Product,其中每个都有_ Permission

ActiveRecord关联现在看起来像这样:

class User < ActiveRecord::Base
  has_many :products
  has_many :permissions
end

class Product < ActiveRecord::Base
  belongs_to :user
  has_one :permission
end

class Permission < ActiveRecord::Base
  belongs_to :product
  belongs_to :user
end

我的问题:

  1. 这是正确的方法(它实际上有效吗?)
  2. 如果我从不需要在我的应用中列出用户的所有权限,是否有必要声明User has_many权限和Permission belongs_to用户?
  3. 我想请大家确认一下我的想法是否正确,或者是否错了,或者是否有更好的方法来掌握我的问题,我希望这个问题对其他人也有用,谢谢!

2 个答案:

答案 0 :(得分:2)

我会同时回答这两个问题。代码将起作用(给定正确的迁移),但不适用于您想要的内容。从User类中删除has_many :permissions,从Permission类中删除belongs_to :user

答案 1 :(得分:0)

  1. 没关系。
  2. 它应该是has_many :permissions, through: :products,如果您希望它能够从用户获得permissions,但permissions表中不包含user_id列。
  3. 生成db查询,如:

    SELECT "permissions".* 
    FROM "permissions" INNER JOIN "products" ON "permissions"."product_id" = "products"."id" 
    WHERE "products"."user_id" = [user_id]