Могу ли я запустить методы #new и #create моего контроллера #game на моей домашней странице?
Нет. Каждый запрос в Rails будет только когда-либо запустить одно действие контроллера, так что это бессмысленная цель. Что вы действительно хотите сделать, так это просто добавить форму или ссылку в свое представление pages/home.html.erb
, которое отправляет запрос POST на /games
.
Вы можете сделать это с помощью button_to
который создает форму, содержащую только одну кнопку:
# these all generate the exact same HTML
<%= button_to("Create game", Game.new) %>
<%= button_to("Create game", games_path, method: :post) %>
<%= button_to("Create game", controller: :games, action: :create) %>
Это будет работать, даже если клиент отключил JS как стандартную форму HTML.
Вы также можно использовать link_to
с опцией method
:
# these all generate the exact same HTML
<%= link_to("Create game", Game.new, method: :post) %>
<%= link_to("Create game", games_path, method: :post) %>
<%= link_to("Create game", controller: :games, action: :create, method: :post) %>
Это добавляет к ссылке атрибут data-method="POST"
. Rails U JS определяет обработчик событий для элементов с этим атрибутом данных, который создаст форму и отправит ее на сервер, чтобы запрос POST отправлялся вместо GET.
Если есть JS ошибки, которые мешают работе обработчика (например, Rails U JS не загружается), вместо этого будет выполняться действие браузера по умолчанию - отправка запроса GET, поэтому обязательно проверьте консоль браузера, если у вас возникнут проблемы.