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
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? –
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. –