Rails – Passer des parameters dans link_to

La page d’index Mes comptes répertorie tous les comptes et, par compte, un lien vers “+ Service”; Cela devrait diriger l’utilisateur vers la page / my_services / new et avoir pré-rempli le champ account_id avec l’ID approprié, selon le lien sur lequel vous avez cliqué sur la page d’index des comptes.

J’ai le debug (params) au bas de chaque page, et avec ce que j’essaie, je ne reçois rien d’autre que: controller et: action apparaissant dans mes parameters pour la page / my_services / new.

Le lien que j’ai essayé est le suivant:

link_to "+ Service", "my_services/new", :account_id => acct.id 

J’ai également une logique dans le contrôleur de services:

 def new @my_service = MyService.new if params[:account_id] @my_service.account_id = params[:account_id] end end 

Quelqu’un peut-il aider avec la bonne façon de le faire? Je n’ai pas encore été en mesure de le faire avec quelques petites choses de piratage désagréables que j’ai essayées.

MODIFIER

Il s’avère que si quelqu’un regarde cette réponse à l’avenir, les ressources nestedes (éventuellement avec l’option shallow: true dans routes.rb) semblent être la voie à suivre. Mes routes.rb pour cette partie ressemble maintenant à ceci:

 resources :accounts, shallow: true do resources :services end 

Mes liens ressemblent maintenant à ceci:

  { :account_id => @account.id } ) %> 

Tout d’abord, link_to est une aide de balise HTML, son deuxième argument est l’URL, suivi de html_options. Ce que vous souhaitez, c’est passer account_id en tant que paramètre url au chemin. Si vous avez configuré correctement les routes nommées dans routes.rb, vous pouvez utiliser les aides de chemin.

 link_to "+ Service", new_my_service_path(:account_id => acct.id) 

Je pense que la meilleure pratique consiste à transmettre les valeurs du modèle en tant que paramètre nested dans:

 link_to "+ Service", new_my_service_path(:my_service => { :account_id => acct.id }) # my_services_controller.rb def new @my_service = MyService.new(params[:my_service]) end 

Et vous devez contrôler que account_id est autorisé pour «affectation de masse». Dans les rails 3, vous pouvez utiliser des contrôles puissants pour filtrer les parameters valides dans le contrôleur auquel il appartient. Je recommande fortement.

http://apidock.com/rails/ActiveModel/MassAssignmentSecurity/ClassMethods

Notez également que si account_id n’est pas défini librement par l’utilisateur (par exemple, un utilisateur ne peut soumettre qu’un service pour le propre unique account_id, il est préférable de ne pas l’envoyer via la requête, mais de le définir dans le contrôleur en ajoutant quelque chose). comme:

 @my_service.account_id = current_user.account_id 

Vous pouvez sûrement combiner les deux si vous autorisez uniquement les utilisateurs à créer un service pour leur propre compte, mais autorisez l’administrateur à créer n’importe qui en utilisant des rôles dans attr_accessible.

J’espère que cela t’aides

Essaye ça

 link_to "+ Service", my_services_new_path(:account_id => acct.id) 

il passera le account_id comme vous voulez.

Pour plus de détails sur link_to, utilisez cette http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

 link_to "+ Service", controller_action_path(:account_id => acct.id) 

S’il ne fonctionne toujours pas, vérifiez le chemin:

 $ rake routes