2010-10-05 3 views
0

je les modèles suivants mis en place:associations modèle d'épargne dans le contrôleur

class Player < ActiveRecord::Base 
    has_many :game_players 
    has_many :games, :through => :game_players 
end 

class Game < ActiveRecord::Base 
    has_many :game_players 
    has_many :players, :through => :game_players 
end 

class GamePlayer < ActiveRecord::Base 
    belongs_to :game 
    belongs_to :player 
end 

Chaque jeu a quatre joueurs. J'ai besoin de quelques conseils dans le contrôleur pour savoir ce que sauverait un nouveau jeu et que les 4 joueurs du modèle GamePlayer ressembleraient. Voilà ce que j'ai dans mon contrôleur jusqu'à présent:

# POST /games 
    # POST /games.xml 
    def create 
    @game = Game.new(params[:game]) 

    respond_to do |format| 
     if @game.save 

     format.html { redirect_to(@game, :notice => 'Game was successfully created.') } 
     format.xml { render :xml => @game, :status => :created, :location => @game } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @game.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

sauver De toute évidence, il est seulement le modèle de jeu mais il me manque de clarté, à la façon d'aller sur la création et l'enregistrement des 4 joueurs en Gameplayer. GamePlayer est vraiment supposé avoir un game_id et un player_id avec des méta-données supplémentaires pour chaque ligne (comme qui a joué en défense, etc.).

Toute aide serait appréciée.

Dans ma forme de vue, je donne les résultats suivants:

<%= form_for(@game) do |f| %> 
    <% if @game.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@game.errors.count, "error") %> prohibited this game from being saved:</h2> 

     <ul> 
     <% @game.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :blue_score %> : 
    <%= f.text_field :blue_score %><br /> 
    <%= f.label :white_score %> : 
    <%= f.text_field :white_score %><br /> 


    <%= label_tag(:white_offense, "White Offense:") %> 
    <%= select_tag "white_offense", options_from_collection_for_select(@players, "name", "id") 
    <%= select_tag "white_defense", options_from_collection_for_select(@players, "name", "id") 
    <%= select_tag "blue_offense", options_from_collection_for_select(@players, "name", "id") 
    <%= select_tag "blue_defense", options_from_collection_for_select(@players, "name", "id") 


    <%= submit_tag("New Game") %> 


    </div> 
<% end %> 
+0

qui params vous envoyez à votre commande ler? – shingara

+0

Mis à jour ma question dans le formulaire généré à mon avis. – Etienne

Répondre

0

Bien que je me sens comme il a d'être une meilleure façon que cela (? Peut-être en utilisant des collections), voici ma solution:

<%= label_tag(:white_offense, "White Offense:") %> 
<%= select_tag "white_offense", options_from_collection_for_select(@players, "id", "name") %> 
<br /> 
<%= label_tag(:white_defense, "White Defense:") %> 
<%= select_tag "white_defense", options_from_collection_for_select(@players, "id", "name") %> 
<br /> 
<%= label_tag(:blue_offense, "Blue Offense:") %> 
<%= select_tag "blue_offense", options_from_collection_for_select(@players, "id", "name") %> 
<br /> 
<%= label_tag(:blue_defense, "Blue Defense:") %> 
<%= select_tag "blue_defense", options_from_collection_for_select(@players, "id", "name") %> 
<br /> 
<%= submit_tag("New Game") %> 

Et mon contrôleur:

@game = Game.new(params[:game]) 
@game.game_players.build(:player_id => params[:white_offense]) 
@game.game_players.build(:player_id => params[:white_defense], :is_defender => 1) 
@game.game_players.build(:player_id => params[:blue_offense], :is_blue => 1) 
@game.game_players.build(:player_id => params[:blue_defense], :is_blue => 1, :is_defender => 1) 
Questions connexes