可以删除ActiveRecord中的方法吗?

问题描述 投票:0回答:1

上下文:Rails 7.1,仅使用数据库交互层,没有Web框架,没有服务器等......

我确信这会激怒一些人,但我在车辆信息数据库中不断遇到关于

ActiveRecord::DangerousAttributeError
.model_name
。汽车有型号,这些型号也有名称。 “只改变数据库”根本不是一个选择。源数据库由外部拥有和管理。我确实无法修改它。我将该数据库与其他公司的外部数据一起使用,所有这些公司都使用、期望并理解“model_name”的概念。我可以在读入数据时对其进行物理修改,但还没有找到可以使其工作的解决方案。

所以我想知道是否可以在加载应用程序时从 Rails 中删除

.model_name
方法。我的应用程序的功能是我的机器本地的,在其他地方没有使用,而且我不在任何地方使用 Rails 方法。因此,这种方法的存在给我带来了问题,而从模型中删除它则不会。

编辑: ActiveModel::

.model_name
https://api.rubyonrails.org/classes/ActiveModel/Naming.html#method-i-model_name 的命名实例方法。对我来说完全不重要。

这可行吗?

ruby-on-rails rails-activerecord ruby-on-rails-7
1个回答
0
投票

我认为您没有比这更糟糕的名字了。

ActiveModel 使用 ActiveModel::Naming API 来与表单、I18N、多态路由等所有内容进行交互。简而言之,几乎所有使 Rails 变得很棒的东西。

在 ActiveRecord 中,

model_name
方法用于根据类名查表、派生外键等。

你的提议会打开一个充满错误的潘多拉盒子,因为模型仍然会响应

model_name
并且在它隐式用作字符串的地方,你将为 Rails 提供垃圾值。不要介意它会直接断裂的地方,因为它需要一个
ActiveModel::Naming::Name
的实例。

ActiveRecord 仍然不提供任何类型的机制来消除危险方法名称的冲突,因此这不是一个很好的选择。这是一个高度固执己见的 ORM,它假设您可以完全控制数据库模式并遵循其约定。

使用另一个像 Sequel 这样的 ORM,它不太依赖元编程或添加适配器层。

© www.soinside.com 2019 - 2024. All rights reserved.