所以我有這樣的應用程序結構:一個Game
模型有很多Allies
和很多Enemies
。在Rails中提交多個表單的自定義動作
我想爲Game
創建一個自定義操作,致力於創建並提交敵人和盟友。 所以在視圖中我會有2個fields_for你可以同時提交。
我從來沒有創建過自定義路線和行爲,或者在同一頁面中提交了2個子表單。
任何人都知道我該怎麼做?感謝
所以我有這樣的應用程序結構:一個Game
模型有很多Allies
和很多Enemies
。在Rails中提交多個表單的自定義動作
我想爲Game
創建一個自定義操作,致力於創建並提交敵人和盟友。 所以在視圖中我會有2個fields_for你可以同時提交。
我從來沒有創建過自定義路線和行爲,或者在同一頁面中提交了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
上執行操作,並且可以以更簡潔的方式訪問驗證和錯誤消息。
你有玩家模型嗎?如果是的話,'遊戲'和'玩家'之間的關聯是什麼? – Pavan
我沒有玩家模型。遊戲has_many:盟友和has_many:敵人。 – LRP