Ciao a tutti,
stavo giocando un po con scriptaculous e mi sono trovato davanti ad un
piccolo problema con inplace editor.
Nella view ho una parte di questo tipo:
<%= @user.name %>
route:
map.connect “current”, :controller=>“users”, :action=>“update”
e controller (sto utilizzando authlogic) :
def update
@user = current_user
if @user.update_attributes(params[:user])
flash[:notice] = "Profile successfully updated."
redirect_to root_url
else
render :action => 'edit'
end
end
editano e salvando quindi il campo name ottengo un problema di token
invalido:
Processing UsersController#current (for 127.0.0.1 at 2009-08-25
21:23:05) [POST]
Parameters: {“id”=>“current”, “value”=>“asd”, “editorId”=>“name”}
ActionController::InvalidAuthenticityToken
(ActionController::InvalidAuthenticityToken):
Rendered rescues/_trace (69.6ms)
Rendered rescues/_request_and_response (0.4ms)
Rendering rescues/layout (unprocessable_entity)
so già che il problema è nel controller o meglio sto sbagliando a
passare i parametri al controller ma non riesco a capire come risolvere.
ps: current contiene l’id dell’attuale user:
Processing UsersController#edit (for 127.0.0.1 at 2009-08-25 21:22:57)
[GET]
Parameters: {“id”=>“current”}
User Load (0.8ms) SELECT * FROM “users” WHERE (“users”.“id” = ‘2’)
LIMIT
Sono agli inizi con rails quindi abbiate pazienza
Dawid
Processing UsersController#current (for 127.0.0.1 at 2009-08-25
21:23:05) [POST]
Parameters: {“id”=>“current”, “value”=>“asd”, “editorId”=>“name”}
ActionController::InvalidAuthenticityToken
(ActionController::InvalidAuthenticityToken):
Dovresti passare al server il parametro authenticity_token che di
solito viene messo automaticamente nei form con form_tag e form_for.
Se guardi le opzioni di InPlaceEditor hai l’opzione callback, che puoi
specificare per modificare i parametri da inviare.
–
Andrea F.
Grazie della risposta, in modo temporaneo nel controller ho inserito:
protect_from_forgery :only => [:new]
in modo da evitare che venga richiesto il token chiamando update, a quel
punto l’operazione viene eseguita ma il campo name non cambia valore:
Processing UsersController#update (for 127.0.0.1 at 2009-08-26 00:50:13)
[POST]
Parameters: {“current”=>“current”, “value”=>“asd”, “editorId”=>“name”}
Any idea?
Riguardo a callback invece come posso generare un token?
Grazie
Dawid
Il 25/08/2009 22:14, Andrea F. ha scritto:
2009/8/26 Dawid P. [email protected]:
Grazie della risposta, in modo temporaneo nel controller ho inserito:
protect_from_forgery :only => [:new]
in modo da evitare che venga richiesto il token chiamando update, a quel
punto l’operazione viene eseguita ma il campo name non cambia valore:
Processing UsersController#update (for 127.0.0.1 at 2009-08-26 00:50:13)
[POST]
Parameters: {“current”=>“current”, “value”=>“asd”, “editorId”=>“name”}
Any idea?
Non viene salvato il valore o non cambia il valore del campo lato
client?
Riguardo a callback invece come posso generare un token?
Puoi usare il metodo form_authenticity_token.
solito viene messo automaticamente nei form con form_tag e form_for.
Se guardi le opzioni di InPlaceEditor hai l’opzione callback, che puoi
specificare per modificare i parametri da inviare.
Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml
–
Andrea F.
Puoi disabilitare in modo permanente il passaggio del token per le XHR,
in
Rails 3 sarà disabilatato di default per questo tipo di requests.
Luca
Non viene salvato il valore, credo che value=>" " non viene gestito in
modo corretto dal controller dato che la tabella user non ha un record
“value” (che in questo caso dovrebbe corrispondere al campo “name”).
Sto seguendo il ragionamento giusto?
Dawid
Il 26/08/2009 11:12, Andrea F. ha scritto:
2009/8/26 Dawid P. [email protected]:
Non viene salvato il valore, credo che value=>" " non viene gestito in
modo corretto dal controller dato che la tabella user non ha un record
“value” (che in questo caso dovrebbe corrispondere al campo “name”).
Sto seguendo il ragionamento giusto?
Di solito si crea un’azione apposta x fare l’update di quell’attributo
usando il parametro value come nuovo valore.
Se invece vuoi utilizzare l’azione update puoi fare qlcosa del genere:
<%= name %>
–
Andrea F.
http://svel.to/2
Grazie sta sera provo
Dawid
Il 26/08/2009 23:34, Andrea F. ha scritto:
Il 26/08/2009 23:34, Andrea F. ha scritto:
Se invece vuoi utilizzare l’azione update puoi fare qlcosa del genere:
});
Funziona tutto perfettamente riguardo al salvataggio del valore,
relativamente al token anche, nel mio layout ho inserito:
<%= javascript_tag “window._token = ‘#{form_authenticity_token}’” %>
e quindi nella view:
callback: function(form, value) {
return {“user[name]”: value, “authenticity_token”: window._token
};
stranamente se nella view provavo direttamente con:
“authenticity_token”: form_authenticity_token
non funzionava.
Thx per l’aiuto.
Dawid