Rails多对多关联报错:NameError (uninitialized constant User::Stakes)
Rails多对多关联NameError问题解决办法
你的问题出在UserStake模型的关联定义上,Rails的关联命名约定在这里被打破了,导致ActiveRecord找不到正确的模型常量。
问题根源
在app/models/user_stake.rb里,你写了:
belongs_to :users belongs_to :stakes
但belongs_to关联对应的是单个对象,按照Rails的命名规则,这里必须使用单数形式的模型名(:user和:stake),而不是复数。当你调用u.stakes时,Rails因为错误的关联定义,误以为要找User::Stakes这个不存在的常量,于是抛出了uninitialized constant User::Stakes的错误。
修正代码
把UserStake模型改成下面这样:
class UserStake < ApplicationRecord belongs_to :user belongs_to :stake end
另外注意到你的Stake模型里有一行has_many :active_stakes,如果这个关联没有实际用途的话,建议删掉,避免额外的混淆。
验证修正
重启Rails控制台后,重新执行你的操作:
s = Stake.find(310524) u = User.find(21) u.stakes << s u.stakes # 现在应该能正常返回关联的Stake集合了
这样就能正确建立User和Stake之间的多对多关联,不会再触发NameError了。
内容的提问来源于stack exchange,提问作者user3755529
相关产品推荐
相关产品推荐

