重写 ApplicationRecord 初始化,是个坏主意吗?

2023-11-28

我正在创建一个foo像这样的对象:

@foo = Foo.new(foo_params)
@foo.bar = Bar.where(name: "baz").first_or_create

但我还需要其他对象来执行此操作。所以,我想到了重写Foo初始化方法执行如下操作:

class Foo < ApplicationRecord
  def initialize(*args, BarName)
    @foo = super
    @foo.bar = Bar.where(name: BarName).first_or_create
  end
end

并这样称呼它:

@foo = Foo.new(foo_params, "baz")

但Foo是一个ApplicationRecord,似乎不建议重写ApplicationRecord初始化方法。

那么我该怎么做呢?还有其他想法吗?这会初始化覆盖的东西吗?


您可以使用活动记录回调为了那个原因。但是,您将无法指定 bar_name,并且需要以某种方式从 Foo 属性动态查找它。

如果这个选项对你有用。将类似以下代码的内容添加到您的模型中。

after_initialize :set_bar

# some other code

def set_bar
  name = # dynamicly_find_name
  self.bar = Bar.where(name: name).first_or_create
end

如果您确实需要指定bar_name,我建议为其创建一个方法。

Foo.new(params).with_bar

def with_bar(bar_name)
  self.bar = Bar.where(name: BarName).first_or_create
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重写 ApplicationRecord 初始化,是个坏主意吗? 的相关文章

随机推荐

  • 列出Oracle中给定用户的所有表

    我是 Oracle 新手 想要查找用户 john 创建的所有表 我通过命令行连接到 Oracle 数据库 命令如下 sqlplus john passwd 如何列出给定用户创建的所有表 例如约翰 这将获取 JOHN 用户是所有者的所有表 S
  • Platform::String 真的那么没用吗?

    我正在尝试在 Windows Store 又名 Metro Style 应用程序中用 C CX 编写几行代码 我惊讶地发现平台 字符串缺少许多基本的字符串操作 例如 代替 or 指数 我想我可以使用内部数据 将其传递给 std string
  • 将 Access DB 表加载到数据表

    我有一个 ACCDB 格式的数据库 其中包含一些表 我使用以下代码成功将其加载到 OleDbDataReader 中 string connectionString Provider Microsoft ACE OLEDB 12 0 dat
  • Eclipse 插件的延迟激活

    我想知道 Eclipse 清单编辑器中的 加载其类之一时激活此插件 复选框有何用处 我认为 Eclipse 总是使用 延迟初始化 方法 这个选项与插件的 BundleActivator 类有关系吗 初始化与激活有什么不同吗 Here是一个类
  • 我可以在配备英特尔高清显卡的笔记本电脑上实现深度学习模型吗

    我目前正在为我的硕士学位做一个关于深度学习的项目 我想安装 keras 库 所以当我开始安装 Theano 和 tensorflow 时 我发现我必须安装 CUDA 但我的笔记本电脑配备了英特尔高清显卡 所以我的问题是 如果我安装它们 它会
  • Nuxt.js - 在所有网址末尾强制添加斜杠

    我正在寻找一种方法来确保我的所有网址都以尾随斜杠结尾 因此首先检查末尾是否已经有尾随斜杠 如果没有则添加一个 我尝试过nuxt 重定向模块 它可以添加斜杠 但随后会导致无限重定向 redirect from to from req gt l
  • Internet Explorer、Json.Net JavaScript 日期和毫秒问题

    我不确定是否是我遗漏了某些东西 或者 IE 或 Json Net 但基本上这是有效的 new Date 2012 08 03T12 36 54 743Z 此操作失败并出现 无效日期 错误 new Date 2012 08 03T12 36
  • Xcode - 警告:函数的隐式声明在 C99 中无效

    收到警告 函数 Fibonacci 的隐式声明在 C99 中无效 怎么了 include
  • 在 Windows Azure 上运行 Fleck(或任何)Websocket 服务器

    我想在 Azure 中以辅助角色运行 WebSocket 服务器 这在模拟器本地工作得很好 但是第一次运行套接字服务器时会出现 Windows 防火墙提示 我想知道是否有人知道如何克服 Azure 上套接字的连接问题 我的套接字服务器实现
  • 从嵌套文件夹导入模块[重复]

    这个问题在这里已经有答案了 我有这样的文件夹结构 main folder done test1 init py check py init py class Tries object def init self print Test 检查
  • 如何在 iframe 中查找 div

    我正在尝试使用 jquery 在 iframe 中查找 div 有没有比我下面使用的方法更好的方法 Iframe contents find MyDiv function atmslidein customer ready function
  • Flex 的 FXG 编辑器

    我见过的唯一适用于 Flex 的 FXG 编辑器是由 7jigen 制作 在线工作或 作为 Flex 应用程序 有人知道另一种吗 我认为它可以在 Illustrator 中完成 但这并没有真正提供简单的导出到 Flex 类型选项 只是给出坐
  • 使用方法引用进行混淆后,会出现 NoSuchMethodError 崩溃

    编译 proguard之前的源代码 public class IntentSession extends BaseIntentSession Override public void onResume super onResume mExe
  • 如何检索模块的路径?

    我想检测模块是否已更改 现在 使用 inotify 很简单 您只需要知道要从中获取通知的目录即可 如何在 python 中检索模块的路径 import a module print a module file 实际上会给你加载的 pyc 文
  • Delphi TPath.GetTempPath 结果被裁剪

    我正在使用 Delphi 2010 我的程序想要获取系统的临时路径 我正在使用 TPath GetTempPath 并且一切正常 至少对于我和我的同事来说 但在某些客户计算机上 此方法返回 当然 不存在的裁剪路径 我发现问题似乎是对 Get
  • 我可以在 Google App Engine(标准环境)中使用 Goroutines 吗?

    下面的例子似乎可行 但是使用安全吗 我的目标是进行一些非常轻的后台处理 而实际的任务队列作业感觉太繁重 func MyHandler w http ResponseWriter r http Request go func do somet
  • REST 复杂/复合/嵌套资源 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我正在尝试解决基于 REST 的 API 中的概念的最佳方法 不包含其他资源的扁平资源没有问题 我遇到麻烦的是复杂的资源 例如 我有一本漫画书的资源 ComicBook上面有各种
  • 不平衡数据和加权交叉熵

    我正在尝试使用不平衡数据训练网络 我有 A 198 个样本 B 436 个样本 C 710 个样本 D 272 个样本 我已经阅读了有关 weighted cross entropy with logits 的内容 但我找到的所有示例都是用
  • TableRow 跨度不适用于动态添加的行

    我在将行动态添加到滚动视图内的 TableLayout 时遇到以下问题 这些行遵循以下模式 第 1 行 单元格横跨整个表格第 2 行 两个单元格第 3 行 单元格横跨整个表格 N 行 两个单元格 问题在于 具有一个单元格跨越该行的行实际上根
  • 重写 ApplicationRecord 初始化,是个坏主意吗?

    我正在创建一个foo像这样的对象 foo Foo new foo params foo bar Bar where name baz first or create 但我还需要其他对象来执行此操作 所以 我想到了重写Foo初始化方法执行如下