Rails 3作用域发现给出了ActiveRecord :: ReadOnlyRecord

时间:2011-02-15 13:49:14

标签: ruby-on-rails ruby-on-rails-3 activerecord

我正在将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

2 个答案:

答案 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)。