多对多关系关联问题
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 除非实际上有一些更具描述性的东西,例如 Ticket
或 Entry
.
我有两个 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 除非实际上有一些更具描述性的东西,例如 Ticket
或 Entry
.