Comment appeler une méthode de controller à partir d'un bouton dans les rails 4
Donc je me sens vraiment stupide, mais je n'arrive pas à trouver une réponse.
J'ai donc une méthode qui doit être appelée exactement une fois, et puisqu'il ne s'agit que de la phase expérimentale, j'ai décidé qu'un simple bouton devrait suffire. Cependant, je ne semble pas pouvoir trouver comment / si je peux simplement appeler la méthode à partir d'un clic de bouton.
la méthode est dans home_controller.rb et le bouton est dans l'index.HTML.erb
des idées? Ou n'est-ce pas quelque chose que je peux faire?
5 réponses
<%= form_tag home_action_path, method: :post do %>
<%= submit_tag 'Call Action' %>
<% end %>
pourrait aussi utiliser un lien
<%= link_to 'Call Action', home_action_path, method: :post %>
ou vous pouvez utiliser button_to
<%= button_to 'Call Action', home_action_path, method: :post %>
dans vos itinéraires
post 'home/action'
une Autre option est de créer un itinéraire pour votre action et de l'appeler de cette façon. Pardonnez - moi, Je ne suis pas sûr de ce que votre home_controller.rb
est en train de faire. Si c'est le controller pour votre page d'accueil, je crois un pages_controller.rb
avec un home
méthode est plus conventionnelle pour les Rails.
Si c'était le cas, et en supposant que la méthode que vous voulez l'appeler, est nommé call_action
,
pages_controller.rb
ressemblerait à quelque chose comme:
class PagesController < ApplicationController
#...
def call_action
<<does something really nifty>>
end
end
config/routes.rb
look comme:
AppName::Application.routes.draw do
#...
resources :pages do
collection do
get :call_action
end
end
end
Le lien sur votre page d'accueil views/pages/home.html.erb
devrait ressembler à ceci:
<%= link_to "Call Action", call_action_pages_path %>
vous devriez courir rake routes
sur votre ligne de commande pour vous assurer d'avoir la bonne route, puis coller _path
sur la fin.
Si vous souhaitez que votre lien soit un bouton, vous pouvez créer un style classe pour cela et l'ajouter à votre lien:
<%= link_to "Call Action", call_action_pages_path, class: "button" %>
Ou de l'envelopper dans un style classe:
<div class="button">
<%= link_to "Call Action", call_action_pages_path %>
</div>
<%= button_to 'Invite a user', new_project_invite_path, method: :get, remote: true, class: 'btn primary' %>
si vous ne voulez pas que ce soit un appel Ajax alors vous pouvez supprimer remote: true
c'est aussi simple que d'ajouter méthode__ controller _path au HTML.
Par exemple, j'ai un itinéraire filaments/new
, et pour ajouter un bouton qui permet d'accéder à partir de tout point de vue:<%= button_to "Add", new_filament_path, method: :get %>