Rails ActiveRecord 关联 "has_many, each of which has_one"
Rails ActiveRecord association "has_many, each of which has_one"
我有一个关于 ActiveRecord 关联的问题,我正在尝试建立一个 User
模型,其中每个用户可以拥有许多 Product
(然后属于该特定用户)。但是,在产品展示之前,它需要一个活动权限,所以我想添加第三个模型,Permission
,到所说的构造。
我制定了以下句子以使思考过程更容易:
一个User
has_manyProduct
个,每个has_onePermission
.
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
我的问题:
- 这是正确的方法吗(它真的有效吗?)
- 如果我不需要在我的应用程序中列出用户的所有权限,是否有必要声明
User
has_many 权限和 Permission
belongs_to 用户?
想请教各位确认一下我的想法是对还是错,或者有没有更好的办法解决我的问题,希望这个问题对其他人也有用,谢谢!
我会同时回答这两个问题。该代码将工作(给定正确的迁移),但不是您想要的。从用户 class 中删除 has_many :permissions
并从权限 class 中删除 belongs_to :user
。
- 没关系。
- 应该是
has_many :permissions, through: :products
,如果你想让它能够从用户那里得到permissions
,但是在permissions
table中不包含user_id
柱子。
数据库查询生成如下:
SELECT "permissions".*
FROM "permissions" INNER JOIN "products" ON "permissions"."product_id" = "products"."id"
WHERE "products"."user_id" = [user_id]
我有一个关于 ActiveRecord 关联的问题,我正在尝试建立一个 User
模型,其中每个用户可以拥有许多 Product
(然后属于该特定用户)。但是,在产品展示之前,它需要一个活动权限,所以我想添加第三个模型,Permission
,到所说的构造。
我制定了以下句子以使思考过程更容易:
一个User
has_manyProduct
个,每个has_onePermission
.
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
我的问题:
- 这是正确的方法吗(它真的有效吗?)
- 如果我不需要在我的应用程序中列出用户的所有权限,是否有必要声明
User
has_many 权限和Permission
belongs_to 用户?
想请教各位确认一下我的想法是对还是错,或者有没有更好的办法解决我的问题,希望这个问题对其他人也有用,谢谢!
我会同时回答这两个问题。该代码将工作(给定正确的迁移),但不是您想要的。从用户 class 中删除 has_many :permissions
并从权限 class 中删除 belongs_to :user
。
- 没关系。
- 应该是
has_many :permissions, through: :products
,如果你想让它能够从用户那里得到permissions
,但是在permissions
table中不包含user_id
柱子。
数据库查询生成如下:
SELECT "permissions".*
FROM "permissions" INNER JOIN "products" ON "permissions"."product_id" = "products"."id"
WHERE "products"."user_id" = [user_id]