我的某些模型具有要自动设置的“ company_id”列。所以我想重写activerecord库中的某些方法。
我在config / initializers中尝试了此操作,但不起作用:
class ActiveRecord::Base
after_initialize :init
def init
if (self.respond_to(:company_id))
self.company_id= UserSession.find.user.company_id
end
end
end
我创建了一个模块:
module WithCompany
def initialize_company
self.company_id= UserSession.find.user.company_id
end
end
并将其包括在模型中:
class Exam < ActiveRecord::Base
include WithCompany
after_initialize :init
def init
initialize_company
end
end
还有什么我可以做的吗?
最佳做法是说不要在模型中设置与会话相关的字段。为此使用控制器。
这里有两个问题。首先,是将一堆东西注入所有ActiveRecord模型中,而最好仅将功能添加到相关模型中。
其次,您正在打破MVC模式,试图将会话上下文注入模型。
相反,您应该做的是在一个模块中编码功能,并仅在相关模型中混合该模块。根据上下文,而不是覆盖默认的AR行为,而是在会话设置正确且模型为company-的情况下,在传递当前会话上下文的过程中添加新方法(依赖注入),并返回使用所需公司初始化的模型。意识到的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句