【发布时间】:2026-02-12 20:25:02
【问题描述】:
我正在将使用 rails 4.2.8 构建的旧 Rails 应用程序升级到 rails 5.0.x(试用过 rails 5.0.1 和 5.0.7 版本并遇到同样的问题)。
基础 Rails 应用程序升级顺利,我的基础 Rails 应用程序运行良好。但是,有一个内置 angular 的前端应用程序和一个使用 nodejs 构建的前端应用程序,它们具有一些通信通道,如 api 和一些控制器来与基本 Rails 应用程序通信。
我在其中一个在线控制器中遇到问题:
render(:json => result, methods: [:mdobjectsAttributes, :blockAttributes, :entityFormTemplateBlock], :status => 200, :errorCode => 0, :layout => false)
错误是:
NoMethodError (undefined method `mdobjectsAttributes' for #Formtemplateblock:0x000055d7ff2a6480>):
所以,我知道我需要更新/更改 attr_accessible 和 attr_protected 功能以支持强参数。我在模型中看到它们,但我不确定这是否对 response methods 左右有影响...我确实更新模型以使用 ApplicationRecord 而不是 ActiveRecord::Base。
另外,我确实将jbuilder 更新为最新版本2.11.x。
那么,对于解决方案有什么建议吗?显然我错过了什么?
这是显示错误的模型和控制器的预览。
【问题讨论】:
-
这与强参数无关。强参数仅用于在创建和更新资源时将传入参数列入白名单,以便批量分配给模型实例。它与 JSON 渲染完全无关。实际上很难得出任何结论,因为我们甚至不知道
:mdobjectsAttributes, :blockAttributes应该来自哪里以及为什么命名如此不受欢迎。 -
遗留项目......有这么多的混乱......我正在尝试将 ruby 的版本从 2.4.2 升级到 2.5.1 和 rails 4.2.8 到 5.xx ...... . 完成了很多工作,基本应用程序工作正常,只是几个控制器和动作看起来像上面那样。如果我将代码恢复到以前的版本,它会突然丢失方法..
-
如果您在 git 中完成了分支,我会存储或提交您的更改,然后检查任何标签/分支正在工作并找到有问题的方法。 Github 对此也非常有用。 camelCase 告诉我,它更有可能是一些应用程序代码,然后是 gem 或框架,因此只能在给定所述代码的情况下得到。
-
是的,我正在使用分支。该应用程序是 docker setup 的一部分。因此,当我将分支更改为旧版本的代码时,它运行良好,只是在我已经对 ruby 和 rails 进行了一些升级的分支上,我遇到了问题。
-
@max 这里也是错误和控制器中提到的模型的预览。
标签: ruby-on-rails json ruby render upgrade