#ruby-on-rails #json #ruby #render #upgrade
Вопрос:
Я нахожусь в процессе обновления своего старого приложения rails, созданного с rails 4.2.8
помощью to rails 5.0.x
(пробовал версии rails 5.0.1 и 5.0.7 и столкнулся с той же проблемой).
Обновление приложения base rails прошло нормально, и мое приложение base rails работает нормально. Тем не менее, существует интерфейсное приложение, встроенное в angular, а также приложение, созданное с помощью nodejs, которое имеет некоторые каналы связи, такие как api, и некоторый контроллер для связи с приложением base 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
.
Итак, есть ли какие-либо предложения по решению? Очевидно, я что-то упускаю?
Вот предварительный просмотр моделей и контроллера, где отображаются ошибки.
Комментарии:
1. Это не имеет ничего общего с Сильными параметрами. Строгие параметры используются только для занесения входящих параметров в белый список для массового назначения экземплярам модели при создании и обновлении ресурсов. Это совсем не относится к рендерингу в формате JSON. На самом деле довольно трудно сделать какой-либо вывод, поскольку мы понятия не имеем, откуда
:mdobjectsAttributes, :blockAttributes
они вообще должны взяться и почему название так не похоже на рубиновое.2. унаследованный проект… там так все запутано.. и я пытаюсь обновить версии ruby с 2.4.2 до 2.5.1 и rails с 4.2.8 до 5.xx …. проделана большая работа, и базовое приложение отлично работает, всего несколько контроллеров и действий, которые выглядят так, как описано выше. Внезапно метод отсутствует, если я верну код к предыдущим версиям, он будет работать хорошо..
3. Если вы сделали ветви в git, я бы спрятал или зафиксировал ваши изменения, а затем проверил, какой тег/ветвь работал, и нашел соответствующий метод. Github также очень полезен для этого. camelCase говорит мне, что, скорее всего, это какой-то код приложения, а не драгоценный камень или фреймворк, и поэтому на него можно ответить только с учетом указанного кода.
4. Да, я использую ветви. И приложение является частью настройки docker. Итак, когда я меняю ветки на более старую версию кода, это работает хорошо, просто в ветке, где я уже сделал некоторое обновление ruby и rails, у меня возникла проблема.
5. @max здесь также представлен предварительный просмотр моделей, упомянутых в разделе ошибка и контроллер.
Ответ №1:
После 2-3 дней изучения проблемы мне удалось исправить ее, добавив отсутствующие методы в требуемую модель в качестве attr_accessor следующим образом:
attr_accessor :blockAttributes, :entityFormTemplateBlock...
Поскольку у меня были проблемы в 15 моделях, мне пришлось оптимизировать свое исправление, создав модуль ruby и включив его в требуемые модели.
Образец модуля в rails app/lib/custom_attr_accessors.rb
module CustomAttrAccessors
attr_accessor :blockAttributes, :entityFormTemplateBlock..
end
и, наконец, включите этот модуль в модель:
class Formtemplate < ApplicationRecord
include CustomAttrAccessors
.....