Sto costruendo una semplice API json in Rails 3.1. Ho creato un controller che ha due funzioni:I binari rispondono_con recitazione diversa nell'indice e creano il metodo
class Api::DogsController < ActionController::Base
respond_to :json, :xml
def index
respond_with({:msg => "success"})
end
def create
respond_with({:msg => "success"})
end
end
In routes.rb ho
namespace :api do
resources :dogs
end
Quando faccio una richiesta GET a http://localhost:3000/api/dogs ottengo il JSON corretta dall'alto. Quando faccio un post allo stesso URL, ottengo un'eccezione rotaie:
ArgumentError in Api::DogsController#create
Nil location provided. Can't build URI.
actionpack (3.1.0) lib/action_dispatch/routing/polymorphic_routes.rb:183:in `build_named_route_call`
actionpack (3.1.0) lib/action_dispatch/routing/polymorphic_routes.rb:120:in `polymorphic_url'
actionpack (3.1.0) lib/action_dispatch/routing/url_for.rb:145:in `url_for'
Ma se cambio il codice creare per
def create
respond_with do |format|
format.json { render :json => {:msg => "success"}}
end
end
restituisce il JSON bene.
Qualcuno può spiegare cosa sta succedendo qui?
Impostazione posizione letterale stringa "nil" ha funzionato: 'reply_with ({: error =>" bad "},: status => 401,: location =>" nil ")' –
@kwbeam stavo parlando di un valore attuale nullo nell'ultimo paragrafo (mi rendo conto ora che le virgolette potrebbero essere state un po 'fuorvianti) – Aubergine
Pensavo volessi dire nil l'oggetto, non la stringa letterale, ma quando l'ho provato, non ha funzionato. Tuttavia, ho appena cambiato di nuovo a zero (l'oggetto, non la stringa letterale) e sta funzionando. Quindi a quanto pare ho avuto un fallimento da qualche parte, ma non sono in grado di ricostruire quello che ho fatto di sbagliato. Dispiace per la confusione. (Avevo aggiornato la versione di Rails e molte gemme nel frattempo, quindi forse c'era un bug che veniva corretto ... ma non sono sicuro) –