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?

17
demandé sur Slippery John 2013-06-21 23:47:46

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'
19
répondu spullen 2013-06-21 20:01:39

regardez button_to.

Exemple montre que vous pouvez faire quelque chose comme

<%= button_to "Some Button", :method=> "someButton" %>
4
répondu David 2013-06-21 20:01:06

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>
3
répondu richardson 2017-05-23 12:32:14
 <%= 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

0
répondu Sai Ram Reddy 2017-09-07 04:51:14

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 %>

0
répondu Mika Yeap 2017-12-26 11:16:00