Как вызвать метод контроллера с кнопки в рельсах 4

Так что я чувствую себя очень глупо прямо сейчас, но я не могу найти ответ.

Итак, у меня есть метод, который нужно вызвать ТОЧНО один раз, и, поскольку это только экспериментальная фаза, я решил, что будет достаточно простой кнопки. Однако я не могу понять, как/могу ли я просто вызвать метод одним нажатием кнопки.

Метод находится в home_controller.rb, а кнопка — в index.html.erb.

Любые идеи? Или это не то, что я могу сделать?


person Slippery John    schedule 21.06.2013    source источник


Ответы (5)


<%= form_tag home_action_path, method: :post do %>
  <%= submit_tag 'Call Action' %>
<% end %>

также можно использовать ссылку

<%= link_to 'Call Action', home_action_path, method: :post %>

или вы можете использовать button_to

<%= button_to 'Call Action', home_action_path, method: :post %>

в ваших маршрутах

post 'home/action'
person spullen    schedule 21.06.2013
comment
для маршрутов в rails 6 это должно быть сообщение «homes/action», а путь будет home_action_path - person Humayun Naseer; 24.02.2021

Взгляните на button_to.

Пример показывает, что вы можете сделать что-то вроде

<%= button_to "Some Button", :method=> "someButton" %>
person David    schedule 21.06.2013
comment
что, если кнопка создается внешним скриптом. скажем, например, stripe.js генерирует кнопку «Оплатить картой». Как я могу связать эту ссылку Pay with Card с методом в моем контроллере. благодаря. - person Bishisht Bhatta; 26.10.2016

Другой вариант — создать маршрут для своего действия и назвать его таким образом. Извините, я не знаю, что делает ваш home_controller.rb. Если это контроллер вашей домашней страницы, я считаю, что pages_controller.rb с методом home более традиционны для Rails.

Если бы это было так, и предположим, что метод, который вы хотите вызвать, называется call_action,

Ваш pages_controller.rb будет выглядеть примерно так:

class PagesController < ApplicationController
  #...

  def call_action
    <<does something really nifty>>
  end

end

Ваш config/routes.rb будет выглядеть так:

AppName::Application.routes.draw do
  #...

  resources :pages do
    collection do
      get :call_action
    end
  end

end

Ссылка на вашей домашней странице views/pages/home.html.erb будет выглядеть так:

<%= link_to "Call Action", call_action_pages_path %>

Вы должны запустить rake routes в своей командной строке, чтобы убедиться, что у вас правильный маршрут, а затем вставить _path в конце.

Если вы хотите, чтобы ваша ссылка была кнопкой, вы можете создайте стилизованный класс для этого и добавьте его к своей ссылке:

<%= link_to "Call Action", call_action_pages_path, class: "button" %>

Или оберните его в стилизованный класс:

<div class="button">
  <%= link_to "Call Action", call_action_pages_path %>
</div>
person richardsonae    schedule 29.11.2016

 <%= button_to 'Invite a user', new_project_invite_path, method: :get, remote: true, class: 'btn primary' %>

Если вы не хотите, чтобы это был вызов Ajax, вы можете удалить remote: true

person Sai Ram Reddy    schedule 07.09.2017

Это так же просто, как добавить метод_контроллер_path в HTML.
Например, у меня есть маршрут filaments/new, и добавить кнопку, которая ссылается на него из любого просмотр:
<%= button_to "Add", new_filament_path, method: :get %>

person Mika Yeap    schedule 26.12.2017