2010-07-11 7 views
1

Quelque chose ne va pas avec l'action PUT ici, le formulaire est traité mais le champ mis à jour n'est pas sauvegardé.Sinatra HTTP Méthode 'PUT'

J'ai fait ce que font les utilisateurs de Sinatra, en ajoutant "_method" pour que Sinatra reconnaisse que c'est une action HTTP PUT. Quelqu'un pourrait-il repérer une erreur ici?

# edit 
get '/entries/*/:id/edit' do 
    @entry = Entries.get(params[:id]) 
    @title = "edit" 
    erb :edit, :layout => :edit_layout 
end 

# update 
put '/entries/:id' do 
    @entry = Entries.get(params[:id]) 
    if @entry.save 
    redirect "/entries/id=#{@entry.id}" 
    else 
    redirect "/enewsletters" 
    end 
end 

<!-- Edit form --> 
<form action="/enewsletters/edit/<%= @entry.id %>" method="post"> 
    <input name="_method" value="put" type="hidden"/> 
    <p> 
    <label>Content</label><br/> 
    <input type="text" name="entry[title]" value="<%= @enew.title %>"> 
    </p> 
    <p> 
    <input type="submit" name="commit" value="update"> 
    </p> 
</form> 

Répondre

3

Vous ne semblez pas faire une mise à jour du @entry, vous êtes juste aller chercher l'entrée spécifique avec l'identifiant de params. Utilisez-vous ActiveRecord? Si c'est le cas, au lieu de @entry.save, essayez @entry.update_attributes(params[:entry]). Editer: Je suppose que vous n'utilisez pas AR depuis que je viens de remarquer l'appel .get. Quel que soit ORM que vous utilisez doit avoir un moyen facile de mettre à jour les attributs, puis enregistrez l'enregistrement.

+0

arrhh..thanks. @ entry.update_attributes (params [: entrée]) fonctionne! J'utilise le datamapper. – crayfish

+2

Si cela résolvait votre problème, je vous serais reconnaissant de marquer cela comme la bonne réponse pour les futurs lecteurs ... et pour mon égoïsme de représentant;). – theIV

Questions connexes