Tengo un problema en mi aplicación Rails 3.2 donde un atributo virtual enviado de manera relajada a través de JSON no está en el lugar correcto en hash de params. Bueno, no es donde espero. Queda por verse si mis expectativas son correctas. :)Atributo virtual no movido al hash del modelo dentro de los parámetros
que tienen un modelo utilizando el patrón atributo virtual estándar, así:
class Track < ActiveRecord::Base
def rating
# get logic removed for brevity
end
def rating=(value)
# set logic
end
def as_json(options={}) # so my method is in the JSON when I use respond_with/to_json
super(options.merge(methods: [:rating]))
end
end
El JSON envió a mi controlador se parece a esto:
{"id":1,"name":"Icarus - Main Theme 2","rating":2}
Para ser claros, el nombre y id no son virtuales, la calificación es.
termino con esto en el hash params, después de rieles hace su magia:
{"id"=>"1", "name"=>"Icarus - Main Theme 2", "rating"=>2, "track"=>{"id"=>"1", "name"=>"Icarus - Main Theme 2"}}
Como se puede ver, la identificación y el nombre que sea a la anidada: hash de pista, pero calificación no lo hace. ¿Es este comportamiento esperado? Se rompe la práctica (algo) estándar de utilizar el hash anidado en el controlador porque el hash anidado no contiene todos los parámetros que necesito.
Track.update(params[:id], params[:track]) # :track is missing rating
Gracias por su ayuda!
Puede pegar el formulario que está haciendo la presentación, parece que no tiene el alcance adecuado para rastrear – MatthewFord