Могу ли я запустить методы #new и #create моего контроллера #game на моей домашней странице? - PullRequest
0 голосов
/ 13 июля 2020

Я создаю счетчик для карточной игры и хотел бы, чтобы кнопка «Новая игра» была прямо на моей домашней странице, то есть без передачи представления # new-game. Моя модель #game не требует создания какой-либо информации (например: имя ...), поэтому для ее создания не требуется форма в представлении # новой игры. Приложение в настоящее время работает, но мне нужно передать свое представление # новой игры, прежде чем можно будет создать # игру.

Я борюсь с logi c действий #new и #create моего #game controller происходит в моем #home view (#pages controller).

Кто-нибудь может помочь?

Большое спасибо

Вот мой #game контроллер:

  def new
    @game = Game.new
    @game.biddings.build
  end

  def create
    @game = Game.new(game_params)
    @game.save

    redirect_to game_path(@game)
  end

Мой контроллер #page:

class PagesController < ApplicationController
  skip_before_action :authenticate_user!, only: [:home]

  def home
  end
end

И мой #home view:

<div class="full-height home-colors">
  <div class="abs-center">
    <h1>BIENVENU SUR COINCH'COUNT !</h1>

    <p>Coinch'Count est un compteur de points simplifié pour la coinche.</p>

    <%= link_to 'Nouvelle partie', new_game_path, class: 'regular-btn' %>

    <%= link_to 'Liste de toute les parties', games_path, class: 'transp-btn' %>
  </div>
</div>

Идея состоит в том, чтобы первая ссылка_to напрямую создала экземпляр #game и перенаправление на #game show.

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Могу ли я запустить методы #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, поэтому обязательно проверьте консоль браузера, если у вас возникнут проблемы.

0 голосов
/ 13 июля 2020

Вы можете попробовать объявить свою ссылку как «сообщение» и использовать путь создания. games_path:

<%= link_to 'Nouvelle partie', games_path, method: :post, class: 'regular-btn' %>

Это будет работать, потому что, как вы сказали, у вас нет обязательных параметр:

Моя модель #game не требует создания какой-либо информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...