如何区分相似的has_many:通过Rails中的关联?
Posted
技术标签:
【中文标题】如何区分相似的has_many:通过Rails中的关联?【英文标题】:How to differentiate similar has_many :through associations in Rails? 【发布时间】:2021-12-27 23:45:30 【问题描述】:我将从我的模型开始:
class Project < ApplicationRecord
has_many :permissions
has_many :wallets, through: :permissions
has_many :follows
has_many :wallets, through: :follows
end
class Permission < ApplicationRecord
belongs_to :project
belongs_to :wallet
end
class Follow < ApplicationRecord
belongs_to :project
belongs_to :wallet
end
class Wallet < ApplicationRecord
has_many :permissions
has_many :projects, through: :permissions
has_many :follows
has_many :projects, through: :follows
end
如您所见,Permission 和 Follow 都是通过 Projects 和 Wallet 的关联来实现的。
它们有不同的用途(权限使电子钱包可以访问管理项目,而关注让电子钱包“关注”项目以进行更新)。
那么我该如何区分它们呢?例如,如果我做Wallet.find(1).projects
,它默认使用“关注”模型……虽然在某些情况下我希望它实际使用“权限”模型。
【问题讨论】:
附带说明Follow
不是一个好的型号名称。模型代表业务逻辑中的事物,因此它们的名称应该是名词而不是动词。
【参考方案1】:
相信您会发现它将默认为最后定义的has_many :projects
。
需要给关联起不同的名称,这需要类似 ...
class Wallet < ApplicationRecord
has_many :permissions
has_many :projects, through: :permissions
has_many :follows
has_many :follow_projects, through: :follows, source: :project
end
【讨论】:
以上是关于如何区分相似的has_many:通过Rails中的关联?的主要内容,如果未能解决你的问题,请参考以下文章