Как вызвать метод контроллера с кнопки в рельсах 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 %>