2017-07-19 7 views
-1

このアプリケーションの構造はGameです。Alliesと多くはEnemiesのモデルです。Railsで複数のフォームを送信するカスタムアクション

Gameのカスタムアクションを作成して、敵と同盟国を作成して提出するために使用します。 ビューでは、同時に2つのフィールドを提出できます。

カスタムルートとアクションを作成したことがなく、同じページに2つの子フォームを送信したことがありません。

私はこれをどのように行うことができますか?おかげ

+0

'Player'モデルはありますか?もしそうなら、 'Game'と' Player'との関連は何ですか? – Pavan

+0

私はPlayerモデルを持っていません。ゲームhas_many:同盟国とhas_many:敵。 – LRP

答えて

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 %> 

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を実行し、検証とエラーメッセージをよりきれいにアクセスできるようにします。

+0

'' create_players'を '' create_players'に ': 'create_players'を' 'create-players /:id'を' 'ゲーム# create_players'を使用して動作させますが、送信ボタンはまだ動作しません – LRP

+0

2つのルートが必要ですか? – LRP

+0

@LRPはもう少し説明を書いた –

関連する問題