我正在将Rails应用程序从2.3.10升级到3.0.4,并且在我的控制器中更新模型时遇到了问题。我一直在“查找”模型查找,以防止用户更新不属于它们的对象。它在2.3中按预期工作,但我在Rails 3中使用update_attributes得到一个ActiveRecord :: ReadOnlyRecord错误。
在Rails 3中执行此操作的正确方法是什么?
项目负责人:
def update
@project = current_user.projects.find(params[:id])
if @project.update_attributes(params[:project])
# saved
else
# not saved
end
end
答案 0 :(得分:42)
事实证明,它与使用范围来模拟活动记录关联有关。我可以通过向我的范围添加.readonly(false)
来修复它。
答案 1 :(得分:3)
一种可能的解决方案是创建新文件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)。