2017-07-19 28 views
-1

所以我有這樣的應用程序結構:一個Game模型有很多Allies和很多Enemies在Rails中提交多個表單的自定義動作

我想爲Game創建一個自定義操作,致力於創建並提交敵人和盟友。 所以在視圖中我會有2個fields_for你可以同時提交。

我從來沒有創建過自定義路線和行爲,或者在同一頁面中提交了2個子表單。

任何人都知道我該怎麼做?感謝

+0

你有玩家模型嗎?如果是的話,'遊戲'和'玩家'之間的關聯是什麼? – Pavan

+0

我沒有玩家模型。遊戲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

必須將'post_create-players /:id'改爲'game#create_players',如::create_players'將'get'create-players /:id'改爲:'games#create_players',如:: create_players'使其工作,但提交按鈕現在不工作,雖然 – LRP

+0

我需要2路由嗎? – LRP

+0

@LRP寫了更多解釋 –