Обновление Rails до 5.2.4.1 ActiveModel :: MissingAttributeError - PullRequest
2 голосов
/ 13 марта 2020

Я пытаюсь обновить с:

  • Ruby 2.2.2
  • Rails 5.0.0
  • Gemfile.lock
    • attr_encrypted (3.1.0)
    • шифровальщик (~> 3.0.0)

до

  • Ruby 2.6. 5
  • Rails 5.2.4.1
  • Gemfile.lock
    • attr_encrypted (3.1.0)
    • шифратор (~> 3.0.0)

и теперь происходит сбой в методах контроллера для полей attr_encrypted.

У меня есть следующее действие:

def index
    respond_to do |format|
      format.html do
        # make sure that only users who have Organization reading abilities see this page
        authorize! :read, Organization
      end

      if current_user.organization_resource?
        params[:organization] = current_user.organization.id
      elsif current_user.isv_resource?
        params[:isv] = current_user.isv.id
      end

      format.json do
        render json: Organization.paginated_summary(
          params[:offset].to_i,
          params[:per_page].to_i,
          query:           params[:query],
          isv_id:          params[:isv],
          organization_id: params[:organization],
          tz_cookie:       cookies[:tzOffset].blank? ? 'UTC' : cookies[:tzOffset]
        )
      end
    end
  end

и происходит сбой с ActiveModel::MissingAttributeError - missing attribute: encrypted_api_token где api_token - это поле attr_encrypted и оно не запрашивается в этом запросе

Если я выполняю блок, который обрабатывается

Organization.paginated_summary(
          params[:offset].to_i,
          params[:per_page].to_i,
          query:           params[:query],
          isv_id:          params[:isv],
          organization_id: params[:organization],
          tz_cookie:       cookies[:tzOffset].blank? ? 'UTC' : cookies[:tzOffset]
        )

, он работает и возвращает ожидаемое данные. Тем не менее, он не работает, когда render json: информация, и я не могу отследить ее.

Если я удалю свойство attr_encrypted из поля, то ошибка не будет возвращена.

Есть кто-нибудь сталкивались с такого рода проблемами?

Заранее спасибо!

1 Ответ

0 голосов
/ 18 марта 2020

Кажется, я нашел проблему, которая, по-видимому, в более старой активной записи не была проблемой. При использовании Organization.select ('x, y, z'). To_ json он больше не работает в более новой версии и пытается получить доступ ко всем полям этого класса вместо использования только выбранных полей. Похоже, нам придется переписать запросы, чтобы они были необработанными SQL для этого типа ситуации или использовать карту (&: атрибуты) для результата. Это помогло: Как вывести результаты необработанного SQL запроса выбора активной записи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...