2011-02-15 13 views
17

Estoy actualizando una aplicación Rails de 2.3.10 a 3.0.4 y estoy teniendo un problema con la actualización de modelos en mi controlador. He estado explorando los hallazgos del modelo para evitar que los usuarios actualicen objetos que no les pertenecen. Funciona como se esperaba en 2.3, pero obtengo un error ActiveRecord :: ReadOnlyRecord con los atributos update_ en Rails 3.Rails 3 hallazgos con ámbito que dan ActiveRecord :: ReadOnlyRecord

¿Cuál es la forma correcta de hacerlo en Rails 3?

controlador de Proyecto:

def update 
    @project = current_user.projects.find(params[:id]) 

    if @project.update_attributes(params[:project]) 
    # saved 
    else 
    # not saved 
    end 
end 
+0

¿Qué biblioteca está utilizando para la autenticación? Parece que estás llamando #readonly en algún lugar de tu objeto: prueba una búsqueda en todo el proyecto para eso. –

Respuesta

42

Resulta que estaba relacionado con el uso de los alcances de hacerse pasar por asociaciones de registro activos. Pude arreglarlo agregando .readonly(false) a mis alcances.

+0

Tuve el mismo problema, y ​​esto también lo solucionó. ¿Alguna idea de lo que causa el problema 'ActiveRecord :: ReadOnlyRecord'? – Jeriko

+1

por lo general es una combinación AR que lo causa, ¿es "projects" un vainilla has_many en los usuarios o usa una cláusula join? –

3

Una posible solución es crear un nuevo archivo config/active_record_monkey_patch.rb y agregar el siguiente contenido en él.

module ReadOnlyFalse 
    def self.included(base) 
    base.class_eval do 
     def readonly? 
     false 
     end 
    end 
    end 
end 

ActiveRecord::Base.send(:include, ReadOnlyFalse) 

código anterior funcionan para todos los modelos readonly (falso).

Cuestiones relacionadas