多对多关系关联问题

Many to many relation association Issue

我有两个 User 和 Lottery 模型,它们通过桥 table Lotteries_Users class name LotteriesUser.

以下是这些模型:

user.rb

class User < ApplicationRecord
  has_many :lotteries_users, class_name: "LotteriesUser"
  has_many :lotteries, through: :lotteries_users
end

lottery.rb

class Lottery < ApplicationRecord
    has_many :lotteries_users, class_name: "LotteriesUser"
    has_many :users, through: :lotteries_users
end

Lotteries_User型号:彩票_user.rb

class LotteriesUser < ApplicationRecord
  belongs_to :users
  belongs_to :lotteries
end

我尝试在 has_many 关系之后使用 class 名称,但仍然无法正常工作。 我得到一个错误 NoMethodError(Users:Module 的未定义方法 `relation_delegate_class') 在 rails 控制台上 Lottery.first.users

NoMethodError(# 的未定义方法“last”) 在 rails 控制台上 User.first.lotteries

只需根据惯例命名您的模型并table,然后点击:

class User < ApplicationRecord
  has_many :lottery_users
  has_many :lotteries, through: :lottery_users
end

# table should be named lottery_users
class LotteryUser < ApplicationRecord
  belongs_to :user # should be singular
  belongs_to :lottery # should be singular
end

class Lottery < ApplicationRecord
  has_many :lottery_users
  has_many :users, through: :lottery_users
end

不正确的命名会导致很多问题,因为如果 table 被命名为 lotteries_users,Rails 将查找 Lotteries::User。当从 table 名称派生出 class 名称时,它假定复数词是名称空间。

连接模型的约定是 SingularSingular 除非实际上有一些更具描述性的东西,例如 TicketEntry.