Ответ 1
Оказывается, это связано с использованием областей видимости для олицетворения активных ассоциаций записей. Я смог исправить это, добавив .readonly(false)
к моим областям.
Я обновляю приложение 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
Оказывается, это связано с использованием областей видимости для олицетворения активных ассоциаций записей. Я смог исправить это, добавив .readonly(false)
к моим областям.
Одним из возможных решений является создание нового файла 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).