2013-08-28 1 views
0

Bonjour en ce moment j'ai un problème à propos button_toRuby on Rails - button_to en utilisant les routes pour appeler la fonction de contrôleur

Je veux installer un bouton qui appelle une méthode dans le contrôleur, voici comment je configurer le bouton:

(ce situé dans les questions/_edit.html.erb)

<%= button_to "Cancel Return", :action => "cancel_return", :controller => "issues" %> 

et je veux que ce appellera cette fonction dans issues_controller.rb

def cancel_return 
    @issue.cancel_return(params) 
    end 

J'ai également ajouté dans le routes.rb

map.issue_cancel_return 'issues/cancel_return', :controller => 'issues', 
         :action => 'cancel_return' 

mais il ne peut pas travailler, je l'ai déjà essayé de déclarer cancel_return comme helper_method, mais aussi ne fonctionne pas. N 'y a-t-il pas une autre solution? ou je le fais mal? J'utilise la version 1.9.3p125 de ruby ​​et la version 2.3.15 de rails, j'ai employé l'ancienne version parce que j'ai essayé de modifier le redmine, n'importe quelle aide sera appréciée.

Merci

+0

questions # cancel_return une route valide? Je n'ai pas vu les routes de redmine.rb mais avez-vous aussi la nouvelle action en dehors de l'ajouter dans le contrôleur? – roninblade

+0

@roninblade en fait je ne suis pas sûr de savoir comment le mettre dans les routes.rb, je l'ai ajouté comme ceci map.issue_cancel_return 'issues/cancel_return',: controller => 'issues', : action => 'cancel_return' , vous pouvez également le voir dans la question éditée –

+0

ce qui se passe quand vous appelez l'action directement sur votre navigateur? c'est à dire. http://127.0.0.1:3000/issues/cancel_return/?plus_your_extra_params – roninblade

Répondre

2

vous devriez les mettre dans un accolades comme celui-ci

<%= button_to "Cancel Return", { :controller => "issues", :action => "cancel_return"} %> 

ce qui se passe est que map ne définit pas la méthode de l'appel comme GET/POST/DELETE donc ce que vous peut faire est d'utiliser ce lieu de vous ligne map dans votre fichier routes.rb

get "issues/cancel_return" => "issues#cancel_return" 

cela devrait résoudre votre problème.

+0

toujours rien ne se passe :(, comment puis-je savoir que la fonction est appelée à côté de la changement de base de données? Existe-t-il une méthode comme php print_r ("TEXT"); exit; dans RoR? juste pour s'assurer que mon bouton fonctionne –

+0

regardez votre journal de serveur, que se passe-t-il et qu'est-ce qui est appelé et non? – dirtydexter

+0

Je suppose que ce n'est pas appelé la dernière action 3 montré dans le journal après avoir cliqué sur le bouton est Processing IssuesController # show (pour 172.16.20.1 au 2013-08-28 11:42:16) [GET] Paramètres: {"controller" => "issues", "action" => "show", "id" => "833"} Rendu de modèle dans les mises en page/base Problèmes de rendu/show Achevé en 408ms (Vue: 65, DB: 316) | 200 OK savez-vous pourquoi ce n'est pas appelé? –

Questions connexes