Rails中如何让命名空间内模型的belongs_to引用外部User模型?
解决Rails模块内模型引用外部User模型的问题
这个问题其实是Rails的常量命名空间查找规则导致的:当你在Freight::Customer模块内的模型里写class_name: 'User'时,Rails会优先在当前模块(Freight::Customer)下查找User常量,也就是你提到的Freight::Customer::User,而不是顶级命名空间的User。
解决方法很简单,只需要在class_name里明确指定顶级命名空间的User模型,用双冒号::前缀即可:
class Freight::Customer::MembershipStatus < ActiveRecord::Base belongs_to :customer, class_name: 'Freight::Customer' # 用::User明确指定顶级命名空间的User模型 belongs_to :created_by, class_name: '::User' validates :from, presence: true validates :to, presence: true validates :customer, presence: true validates :status, presence: true end
这样修改后,Rails就会准确地去查找根命名空间下的User模型,而不会再去当前模块下找同名模型了。如果你的外键字段不是默认的created_by_id,还可以额外指定foreign_key参数,但从你的代码来看,默认字段应该是符合要求的,所以不需要额外配置。
内容的提问来源于stack exchange,提问作者Tân Bùi
相关产品推荐
相关产品推荐

