2011-02-15 2 views
17

2.3.10에서 3.0.4로 Rails 응용 프로그램을 업그레이드하고 컨트롤러에서 모델을 업데이트 할 때 문제가 발생합니다. 나는 사용자가 그들에게 속하지 않는 객체를 업데이트하는 것을 막기 위해 모델 찾기를 "범위 지정"해왔다. 2.3에서 예상대로 작동하지만 Rails 3에서 update_attributes와 함께 ActiveRecord :: ReadOnlyRecord 오류가 발생합니다.Rails 3 범위에서 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

인증에 어떤 라이브러리를 사용하고 있습니까? #readonly를 개체의 어딘가에서 호출하는 것처럼 보입니다. 프로젝트 전체에서 해당 개체를 검색해보십시오. –

답변

42

그것은이 액티브 레코드 협회를 가장 범위를 사용하여 관련이 밝혀졌습니다. 내 범위에 .readonly(false)을 추가하여 문제를 해결할 수있었습니다.

+0

나는 똑같은 문제가 있었는데, 이것 또한 나를 위해 고쳐졌다. 'ActiveRecord :: ReadOnlyRecord' 문제의 원인은 무엇입니까? – Jeriko

+1

일반적으로 그 원인이되는 AR 조인은 사용자에게 바닐라 has_many를 "projects"하거나 join 절을 사용합니까? –

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) 

모든 모델의 코드 작업은 읽기 전용입니다 (false).

관련 문제