Rails命名空间模型下has_many through关联报错host_id列不存在
问题原因
Rails 处理命名空间下模型的关联时,默认生成外键会自动省略命名空间前缀。你的 Admin::Host 模型定义 has_many :admin_host_users 时没有显式指定外键,Rails 会默认用无命名空间的模型名 Host 推断外键为 host_id,和你中间表实际使用的 admin_host_id 字段不匹配,因此触发报错。
解决方案
修改 models/admin/host.rb 中的关联定义,显式指定外键即可:
class Admin::Host < ApplicationRecord has_many :admin_host_users, class_name: 'Admin::HostUser', foreign_key: 'admin_host_id' has_many :users, through: :admin_host_users end
如果需要避免后续关联查询出现其他隐式问题,也可以给中间表关联补充 inverse_of 配置:
class Admin::HostUser < ApplicationRecord belongs_to :admin_host, class_name: 'Admin::Host', foreign_key: 'admin_host_id', inverse_of: :admin_host_users belongs_to :user, inverse_of: :admin_host_users end
内容的提问来源于stack exchange,提问作者Tony Beninate
相关产品推荐
相关产品推荐

