覆盖ActiveRecord :: Base

甲虫汁

我的某些模型具有要自动设置的“ 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

Simone Carletti回答后的解决方案:

我创建了一个模块:

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

还有什么我可以做的吗?

更新2

最佳做法是说不要在模型中设置与会话相关的字段。为此使用控制器。

西蒙妮·卡莱蒂(Simone Carletti)

这里有两个问题。首先,是将一堆东西注入所有ActiveRecord模型中,而最好仅将功能添加到相关模型中。

其次,您正在打破MVC模式,试图将会话上下文注入模型。

相反,您应该做的是在一个模块中编码功能,并仅在相关模型中混合该模块。根据上下文,而不是覆盖默认的AR行为,而是在会话设置正确且模型为company-的情况下,在传递当前会话上下文的过程中添加新方法(依赖注入),并返回使用所需公司初始化的模型。意识到的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

扩展ActiveRecord :: Base

来自分类Dev

扩展ActiveRecord :: Base

来自分类Dev

如何成功继承ActiveRecord :: Base?

来自分类Dev

在PHP中覆盖<base> URL

来自分类Dev

使用ActiveRecord :: Base.connection的正确方法

来自分类Dev

如何传递ActiveRecord :: Base类的哈希值

来自分类Dev

将变量添加到ActiveRecord :: Base

来自分类Dev

扩展ActiveRecord :: Base无法正常工作

来自分类Dev

在模型之间共享ActiveRecord :: Base枚举

来自分类Dev

Django:覆盖base_site.html

来自分类Dev

Base64解码和覆盖文件

来自分类Dev

Rails / ActiveRecord,如何防止摘录覆盖选择?

来自分类Dev

ActiveRecord属性值不能被覆盖

来自分类Dev

覆盖默认的ActiveRecord生成器

来自分类Dev

覆盖ActiveRecord模型上的时间戳属性

来自分类Dev

ActiveRecord不使用覆盖的表名

来自分类Dev

ActiveRecord 自动覆盖特定选择的字段

来自分类Dev

ActiveRecord :: Base.connection.execute的受影响的行

来自分类Dev

从另一个类和ActiveRecord :: Base继承

来自分类Dev

为什么Rails 5使用ApplicationRecord而不是ActiveRecord :: Base?

来自分类Dev

ActiveRecord :: Base.connection.execute(sql)。每个都不返回数据

来自分类Dev

Sidekiq安装-未初始化的常数ActiveRecord :: Base(NameError)

来自分类Dev

使用ActiveRecord :: Base.connection返回哈希而不是数组

来自分类Dev

调用“ ActiveRecord :: Base.create”时,如何调用“创建”?

来自分类Dev

从另一个类和ActiveRecord :: Base继承

来自分类Dev

类用户的超类不匹配-从ActiveRecord :: Base继承

来自分类Dev

覆盖用于在Rails 4中创建表的默认ActiveRecord迁移

来自分类Dev

连接到两个 sqlserver 数据库时,ActiveRecord::Base 不属于从 ActiveRecord 降序的层次结构

来自分类Dev

是什么原因导致弃用警告:ActiveRecord :: Base.raise_in_transactional_callbacks =?

Related 相关文章

  1. 1

    扩展ActiveRecord :: Base

  2. 2

    扩展ActiveRecord :: Base

  3. 3

    如何成功继承ActiveRecord :: Base?

  4. 4

    在PHP中覆盖<base> URL

  5. 5

    使用ActiveRecord :: Base.connection的正确方法

  6. 6

    如何传递ActiveRecord :: Base类的哈希值

  7. 7

    将变量添加到ActiveRecord :: Base

  8. 8

    扩展ActiveRecord :: Base无法正常工作

  9. 9

    在模型之间共享ActiveRecord :: Base枚举

  10. 10

    Django:覆盖base_site.html

  11. 11

    Base64解码和覆盖文件

  12. 12

    Rails / ActiveRecord,如何防止摘录覆盖选择?

  13. 13

    ActiveRecord属性值不能被覆盖

  14. 14

    覆盖默认的ActiveRecord生成器

  15. 15

    覆盖ActiveRecord模型上的时间戳属性

  16. 16

    ActiveRecord不使用覆盖的表名

  17. 17

    ActiveRecord 自动覆盖特定选择的字段

  18. 18

    ActiveRecord :: Base.connection.execute的受影响的行

  19. 19

    从另一个类和ActiveRecord :: Base继承

  20. 20

    为什么Rails 5使用ApplicationRecord而不是ActiveRecord :: Base?

  21. 21

    ActiveRecord :: Base.connection.execute(sql)。每个都不返回数据

  22. 22

    Sidekiq安装-未初始化的常数ActiveRecord :: Base(NameError)

  23. 23

    使用ActiveRecord :: Base.connection返回哈希而不是数组

  24. 24

    调用“ ActiveRecord :: Base.create”时,如何调用“创建”?

  25. 25

    从另一个类和ActiveRecord :: Base继承

  26. 26

    类用户的超类不匹配-从ActiveRecord :: Base继承

  27. 27

    覆盖用于在Rails 4中创建表的默认ActiveRecord迁移

  28. 28

    连接到两个 sqlserver 数据库时,ActiveRecord::Base 不属于从 ActiveRecord 降序的层次结构

  29. 29

    是什么原因导致弃用警告:ActiveRecord :: Base.raise_in_transactional_callbacks =?

热门标签

归档