2009-10-05 5 views
1

Je préparais une fonctionnalité d'édition en ligne rapide dans ma première application Rails et juste au moment où je la faisais fonctionner, il m'est apparu que je pouvais violer les principes de RESTful. L'édition a mis à jour un nom d'image. Pour ce faire, il soumet, via PUT à Image#update et passe le nouveau nom modifié comme image[name].Calling Rails mise à jour Méthode via Inline Edit

La base de données est mise à jour correctement, mais j'ai besoin de cette valeur pour que mon balisage puisse refléter le changement de nom. Pour ce faire, j'appelais /images/:id.json, mais cela m'a fait me demander si une requête PUT peut "valablement" (dans ce sens RESTful) renvoyer une valeur comme celle-ci.

Pensées?

Mise à jour: Pour tout ce que ça vaut, j'utilise jQuery et le plugin jEditable pour faire l'édition en ligne. Voici mon code jEditable:

$(document).ready(function() { 
    $('h2').editable(
    '/images/' + $('#image-id').val() + '.json', 
    { 
     method: 'PUT', 
     name: 'image[name]', 
     submitdata: { authenticity_token: $('#auth-token').val() }, 
     submit: 'Save', 
     cancel: 'Cancel' 
    } 
); 
}) 

Et ma méthode Image#update tel qu'il existe en ce moment:

def update 
    @image = Image.find(params[:id]) 
    if @image.update_attributes(params[:image]) 
    flash[:notice] = "Successfully updated image." 

    respond_to do |format| 
     format.html { redirect_to @image } 
     format.json { render :json => @image.to_json } 
    end 
    else 
    render :action => 'edit' 
    end 
end 
+0

Je suppose que votre principale préoccupation est que la réponse de votre mise à jour JSON est l'image et pas seulement une 'tête: ok'. Est-ce exact? –

+0

Correct. Après avoir mis à jour le nom de l'image, je dois retourner le nouveau nom pour pouvoir l'afficher. Si je ne retourne rien, jEditable semble juste vider le champ. –

Répondre

0

Si votre problème est juste que votre méthode de mise à jour avec JSON fournir un corps de réponse et non pas seulement un 200 OK (Rails's head :ok) alors je ne pense pas que vous ayez besoin d'être inquiet. La réponse par défaut est 200 OK alors la seule différence entre ce que vous faites et ce que Rails fait par défaut (dans ses échafaudages) est que vous incluez également un corps de réponse. Dans la mesure où je peux dire que l'étiquette REST correcte exige seulement que vous retourniez un 200 OK et ne se soucie pas du corps de la réponse, ce qui est en ligne avec ce que vous faites. Au-delà, tout votre code semble excellent.

+0

Merci. Je ne veux pas être trop pédant ou puritain au sujet d'être RESTful, mais je voudrais tirer pour la pureté où je peux et redescendre où je dois. –

Questions connexes