このアプリケーションの構造はGame
です。Allies
と多くはEnemies
のモデルです。Railsで複数のフォームを送信するカスタムアクション
Game
のカスタムアクションを作成して、敵と同盟国を作成して提出するために使用します。 ビューでは、同時に2つのフィールドを提出できます。
カスタムルートとアクションを作成したことがなく、同じページに2つの子フォームを送信したことがありません。
私はこれをどのように行うことができますか?おかげ
このアプリケーションの構造はGame
です。Allies
と多くはEnemies
のモデルです。Railsで複数のフォームを送信するカスタムアクション
Game
のカスタムアクションを作成して、敵と同盟国を作成して提出するために使用します。 ビューでは、同時に2つのフィールドを提出できます。
カスタムルートとアクションを作成したことがなく、同じページに2つの子フォームを送信したことがありません。
私はこれをどのように行うことができますか?おかげ
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 %>
app/views/game/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
を実行し、検証とエラーメッセージをよりきれいにアクセスできるようにします。
'Player'モデルはありますか?もしそうなら、 'Game'と' Player'との関連は何ですか? – Pavan
私はPlayerモデルを持っていません。ゲームhas_many:同盟国とhas_many:敵。 – LRP