我有两个类(organisation.rb和user.rb),它们通过ActiveRecord通过连接表与多对多关系链接。用户可以属于许多组织,组织可以拥有许多用户。
最初,我以这种方式表达了这种关系,这很好用:
class Organisation < ActiveRecord::Base
has_many :members, through: :memberships, source: :user
has_many :memberships
end
class User < ActiveRecord::Base
has_many :organisation_members, through: :memberships, source: :organisation
has_many :memberships
end
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :organisation
end
我请朋友查看我的拉取请求,他建议Rails约定是用连接表的词汇顺序列表来命名连接表。我搜索并确认了这一点:
Rails naming convention for join table
因此,我恢复了我的迁移并重新开始了新的关系:
class Organisation < ActiveRecord::Base
has_many :members, through: :organisations_users, source: :user
has_many :organisations_users
end
class User < ActiveRecord::Base
has_many :organisation_memberships, through: :organisations_users, source: :organisation
has_many :organisations_user
end
class OrganisationsUser < ActiveRecord::Base
belongs_to :user
belongs_to :organisation
end
进行了这些更改之后,我的一些测试因未能识别模型&organisation_user.rb而失败。然后我尝试了“organisations_users.rb&#39;”,也没有运气。这是由于我对铁轨的无知。复数,因此正确命名连接表模型导致所有测试通过。如上所述,正确的命名是:
class OrganisationsUser
这会产生一个相当奇怪的多元化组织的模型名称,后跟一个单一的用户。
我知道这在技术上是正确的。型号名称应该是单一的,但与“会员”相比,它并不容易理解。加入表。
处理这个问题的正确方法是什么 - 我应该恢复会员资格,找到一种方法来覆盖Rails&#39;默认多元化,或继续尴尬地命名现状?