Подтвердить что ты не робот

Rails 3 обнаружены с помощью ActiveRecord:: ReadOnlyRecord

Я обновляю приложение 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
4b9b3361

Ответ 1

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

Ответ 2

Одним из возможных решений является создание нового файла 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)

выше работает код для всех моделей readonly (false).