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

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

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

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

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

Ответы

Ответ 1

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

Ответ 2

Посмотрите button_to.

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

<%= button_to "Some Button", :method=> "someButton" %>

Ответ 3

Другой вариант - создать маршрут для вашего действия и вызвать его таким образом. Простите меня, я не уверен, что делает ваш 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>

Ответ 4

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

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

Ответ 5

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