Rails 3 находит область видимости, давая ActiveRecord :: ReadOnlyRecord - PullRequest
17 голосов
/ 15 февраля 2011

Я обновляю приложение Rails с 2.3.10 до 3.0.4 и столкнулся с проблемой обновления моделей в моем контроллере.Я «находил» область поиска моделей, чтобы пользователи не могли обновлять объекты, которые им не принадлежат.Это работает, как и ожидалось в 2.3, но я получаю ошибку ActiveRecord :: ReadOnlyRecord с update_attributes в Rails 3.

Как правильно сделать это в Rails 3?

Контроллер проекта:

def update
  @project = current_user.projects.find(params[:id])

  if @project.update_attributes(params[:project])
    # saved
  else
    # not saved
  end
end

Ответы [ 2 ]

42 голосов
/ 15 февраля 2011

Оказывается, это было связано с использованием областей для олицетворения активных ассоциаций записей.Я смог исправить это, добавив .readonly(false) к моим областям.

3 голосов
/ 02 декабря 2016

Одним из возможных решений является создание нового файла config / active_record_monkey_patch.rb и добавление в него следующего содержимого.

module ReadOnlyFalse
  def self.included(base)
    base.class_eval do
      def readonly?
        false
      end
    end
  end
end

ActiveRecord::Base.send(:include, ReadOnlyFalse)

Код выше работает для всех моделей только для чтения (false).

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