Ho riscontrato un problema nella mia app Rails 3.2 in cui un attributo virtuale inviato restfully tramite JSON non si trova nel punto giusto dell'hash params. Beh, non è dove mi aspetto. Resta da vedere se le mie aspettative sono corrette. :)L'attributo virtuale non è stato spostato nell'hash del modello all'interno dei parametri
Ho un modello utilizzando il modello standard di attributi virtuali, in questo modo:
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
Il JSON inviato al mio controller simile a questo:
{"id":1,"name":"Icarus - Main Theme 2","rating":2}
Per essere chiari, il nome e l'id non è virtuale, la valutazione è.
io alla fine con questo l'hash params, dopo rotaie fa la sua magia:
{"id"=>"1", "name"=>"Icarus - Main Theme 2", "rating"=>2, "track"=>{"id"=>"1", "name"=>"Icarus - Main Theme 2"}}
Come si può vedere, l'ID e il nome lo fanno alla nidificato: hash pista, ma voto non lo fa. È questo comportamento previsto? Rompe la (un po ') pratica standard di usare l'hash annidato nel controller perché l'hash annidato non contiene tutti i parametri che mi servono.
Track.update(params[:id], params[:track]) # :track is missing rating
Grazie per il vostro aiuto!
È possibile incollare il modulo che sta effettuando l'invio, sembra che non sia correttamente impostato per tracciare – MatthewFord