Настраиваемое действие, отправляющее несколько форм в Rails

Итак, у меня есть такая структура приложения: Game модель, которая имеет много Allies и много Enemies,

Я хочу создать пользовательское действие для Game посвященный созданию и представлению врагов и союзников. Так что в представлении у меня будет 2 fields_for, которые вы можете отправить одновременно.

Я никогда не создавал собственные маршруты и действия и не отправлял 2 дочерние формы на одной странице.

Кто-нибудь знает, как я мог это сделать? Спасибо

1 ответ

Решение

routes.rb

#this route shows the form
get 'create-players/:id', to 'game#new_players', as: :new_players
# this route recieves the form post submission
post 'create-players/:id', to 'game#create_players', as: :create_players

приложение / контроллеры /game_controller.rb:

def new_players
  @game = Game.find(params[:id])
end

def create_players
  #do whatever you want with the params passed from the form like
  @allies = Ally.create(game_id: params[:id], name: params[:ally_fields][:name])
  @enemies = Enemy.create(game_id: params[:id], name: params[:enemy_fields][:name])
  @game = Game.find(params[:id])
end

приложение / просмотров / игры /new_players.html.erb:

<%= form_tag(create_players_paths, @game.id), method: 'POST') do %>
  <% #...fields you have on models, perhaps %>
  <% fields_for :ally_fields do |f|
    <%= f.text_field :name, nil, placeholder: "Ally name", required: true
  <% end % >
  <% fields_for :enemy_fields do |f|
    <%= f.text_field :name, nil, placeholder: "Enemy name", required: true
  <% end % >
  <%= submit_tag "create players", class: "submit" %>
<% end %>

приложение / просмотров / игры /create_players.html.erb:

   <h1> Woah an allie and an enemy have been added to game <%= @game.id %></h1>
   <p> Lets see some blood!</p>

Конечно, вы должны провести проверки на входе и перед обработкой пост-отправки. Обычно вы хотите использовать установленные отношения между объектами, так что вы можете сделать на представлении @model = Modelname.new затем, form_for @object и иметь проверки и сообщения об ошибках, доступные в более понятном виде.

Другие вопросы по тегам