2011-03-10 8 views
5

Así que tengo una página de edición que tiene extremo-carga de los campos editables en él ... ... simple actualización @patient.update_attributes(params[:patient]) ... todo es genial, excepto ....update_attributes pellizca

I 've consiguió un campo fuera de estos 20 que tengo que ajustar un poco antes de que esté listo para el PP y parecería que cualquiera que hacer

  1. dos viajes
    @patient.update_attributes(params[:patient])
    @patient.update_attribute(:field=>'blah')

  2. o conjunto todos individualmente
    patient.update_attributes(:field1=>'asdf', :field2=>'sdfg',:field3=>'dfgh', etc...)

me estoy perdiendo una manera de hacer esto es una sola?

Respuesta

2

Puede crear un atributo virtual para ese campo. Digamos que el campo es: nombre. Se crea una función en el modelo del paciente como:

def name 
    self[:name] = self[:name] * 2 
end 

Y, por supuesto, lo hace sus cosas dentro de esa función :) instaed de sí mismo [: nombre], también se puede utilizar read_attribute (: nombre).

4

¿Cuál es el atributo que necesita modificar? Hay dos maneras de hacer esto:

De cualquier masajear el params antes de enviarlos al método update_attribute:

Sólo estoy dando un ejemplo aquí si quisiera poner de relieve uno de los valores:

params[:patient][:my_tweak_attribute].gsub!(" ", "_") 
@patient.update_attributes(params[:patient]) 

Luego está la forma preferida de hacer su retoques en un before_save o devolución de llamada before_update en su modelo:

class Patient < ActiveRecord::Base 
    before_update :fix_my_tweak_attribute, :if => :my_tweak_attribute_changed? 

    protected 
    def fix_my_tweak_attribute 
     self.my_tweak_attribute.gsub!(" ", "_") 
    end 
end 

Esto mantiene su controlador limpio de código que probablemente no necesite realmente.

Si sólo tiene que añadir un nuevo parámetro que no fueron enviados por la forma que puede hacerlo en el controlador de la siguiente manera:

params[:patient][:updated_by_id] = current_user.id 
@patient.update_attributes(params[:patient]) 

Suponiendo current_user se define para usted en alguna parte (de nuevo, sólo un ejemplo)

Cuestiones relacionadas