C'est très "php" comme solution.
Pour le "mass action", je travaille avec un select_tag qui permet à
l'utilisateur de choisir l'action qu'il souhaite exécuter sur sa sélection
(ne pas l'appeler "_method" sinon rails va rien comprendre, ni "method" car
ca peut faire bugger ie).
A partir de ceci, tu as 2 solutions:

=> sans JS

tu testes la valeur du select dans le formulaire (un bon case / when) et tu
appelles des methodes protégées de ton controller en fonction de cette
valeur.
ex:

case params[:_action]
  when 'delete' then mass_delete
  when 'pdf' then mass_pdf_print
end

ca nécessite d'ajouter une route de type collection pour ta resource (du
genre 'mass_operation') et ton form pointera évidemment dessus. Il n'y a
pas de verbe http idéal, utilise PUT, c'est le moins illogique.

=> avec js

tu crées une route par action disponible sur la collection (genre:
'mass_delete', 'mass_pdf' ...)
tu mets un attribut du style "data-action" sur chacun des tags options de
ton select. Cet attribut contient l'url de la route correspondant à l'action

et tu changes l'action du formulaire en js en fonction de l'action choisie.

Ex de js pas très propre (avec jQuery):

$('form.mass_action).submit(function(event){
  var self = $(this);

  self.attr('action', self.find('select[name=_action]
option:selected').data('action'));

  event.preventDefault();
  event.stopPropagation();

  form..get(0).submit();
  //note, le get(0) renvoie l'élément HTML et non un objet jquery
  //appeler submit() sur un element HTML ne déclenche pas l'évènement
submit jquery
});

Dans tous les cas, tu ne dois pas utiliser respond_to. Le format de ta
requete est "html", pas "pdf". Rails ne devine pas magiquement que tu veux
du pdf. Comme tu fais un send_data, on se fout que la requete rende du pdf
alors que son format est html.

En espérant t'aider

Le 12 mars 2012 19:22, Guirec Corbel <[email protected]> a écrit :

> Bonjour,
>
> As tu essayé cette solution :
> http://www.journaldunet.com/developpeur/client-web/tutoriel-pratique/generer-des-pdf-depuis-une-application-rails.shtml?
>
> Le 12 mars 2012 13:22, Emmanuel BOUGEROLLE <[email protected]> a
> écrit :
>
>  Bonjour,
>>
>> J'ai un peu du mal a trouver la methode pour faire ceci :
>>
>> Une table html encapsulée par un form_tag contenant pour chaque ligne
>> un checkbox_tag permettant de sélectionner plusieurs lignes.
>>
>> Pour chaque lignes sélectionnées, je souhaites pouvoir effectuer deux
>> actions.
>>
>> Rendre un pdf des lignes sélectionnées (réalisé avec prawn),
>> déclencher une mise à jour ne masse des lignes sélectionnées.
>>
>> Hors mon formulaire ne peux contenir qu'une action.
>>
>> J'ai bien tenté de jouer sur deux submit et de tester la valeur comme
>> ceci ma :
>>
>> if params[:commit] == "print"
>>   # déclenchement de ma vue prawn
>>   respond_to do |format|
>>      format.pdf do
>>        pdf = AidePdf.new(@aide, view_context)
>>        send_data pdf.render, filename: "aides.pdf",
>>                              type: "application/pdf",
>>                              disposition: "inline"
>>      end
>> else
>>   # Mise à jour des éléments avec update_all
>> end
>>
>> Je bloque je le rendu de la vue prawn puisque que mon action du
>> formulaire sur le submit ne détermine pas le format.
>>
>> Merci d'avance pour votre aide...
>>
>> --
>> Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance"
>> de Google Groups.
>> Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
>> [email protected]
>> Pour résilier votre abonnement envoyez un e-mail à l'adresse
>> [email protected]
>
>
>  --
> Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de
> Google Groups.
> Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
> [email protected]
> Pour résilier votre abonnement envoyez un e-mail à l'adresse
> [email protected]
>

-- 
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse 
[email protected]

Répondre à