Número de formularios anidados de Rails 3.1+: No se pueden asignar en masa atributos protegidos

Tengo una aplicación de baloncesto, donde una lista tiene muchos jugadores, y un jugador puede estar en varias listas (la razón de muchos a muchos es un archivo de la lista de jugadores).

Lista.rb

<code>class Roster < ActiveRecord::Base
      belongs_to :team
      has_many :rosterizes
      has_many :players, :through => :rosterizes
      accepts_nested_attributes_for :players
      attr_accessible :jersey_number, :team_id, :class_year, :players
    end
</code>

Rosterizes.rb(mal llamado lo sé ...)

<code>class Rosterize < ActiveRecord::Base
  belongs_to :player
  belongs_to :roster
  attr_accessible :player_id, :roster_id
end
</code>

Jugador.rb

<code>class Player < ActiveRecord::Base
  has_many :rosterizes
  has_many :rosters, :through => :rosterizes
  validates_presence_of :first_name, :last_name
  attr_accessible :first_name, :last_name, :active
end
</code>

La vista

<code><div class="well">
    <h2>New Player</h2>
    <%= simple_form_for @roster, :url =>player_added_team_path, :html => { :class => 'form-horizontal' } do |f| %>
        <%= f.simple_fields_for @new_player do |x| %>
            <%= x.input :first_name %>
            <%= x.input :last_name %>
        <%end%>
        <%=f.input :class_year %>       
        <%=f.input :jersey_number %>
        <%=f.input :team_id, :as => :hidden, :input_html => {:value => params[:id]}%>

        <div class="well">
        <%= f.button :submit, :class => 'btn-primary icon-plus-sign btn-success', :value => "Add To Team" %>
        </div>
    <%end%>
</div>
</code>

Los parámetros que estoy enviando al controlador:

<code>"roster"=>{"player"=>{"first_name"=>"first name", "last_name"=>"last name"}, "class_year"=>"freshman", "jersey_number"=>"23", "team_id"=>"1"}, "commit"=>"Add To Team", "id"=>"1"}
</code>

Controlador que está manejando el Ahorro:

<code>def player_added
   @team = Team.find(params[:id])

   #where the issue is happening
   @roster = @team.rosters.build(params[:roster])
   @roster.save
   ...

end
</code>

Tengo un trabajo en torno al uso de los parámetros,PERO Me gustaría entender lo que estoy haciendo mal aquí para propósitos de aprendizaje / futuro y por qué me está dando: No puedo asignar atributos protegidos en masa

Mi trabajo alrededor (un poco hacky):

<code>def player_added

    @team = Team.find(params[:id])
    @roster = @team.rosters.build(:class_year => params[:roster][:class_year], :jersey_number => params[:roster][:jersey_number])
    @new_player = @roster.players.build(:first_name => params[:roster][:player][:first_name], :last_name => params[:roster][:player][:last_name])

    @roster.save
    @new_player.save

    ...

end
</code>

Estoy usando Simple_Form 2.0 ...

Sé que esto es mucha información, ¡pero gracias de antemano!

SOLUCIÓN

En caso de que alguien más tenga el mismo problema / problema similar, yo ...

Instalé este enchufe en =>https://github.com/ryanb/nested_form

Así que estos son los cambios que hice:

Lista.rb

<code>class Roster < ActiveRecord::Base
  belongs_to :team
  has_many :rosterizes
  has_many :players, :through => :rosterizes
  accepts_nested_attributes_for :players
  attr_accessible :jersey_number, :class_year, :players, :player_attributes
end
</code>

También hice el cambio a la vista para:

<code> <%= simple_nested_form_for @roster, :url =>player_added_team_path, :html => { :class => 'form-horizontal' } do |f| %>
      <%= f.simple_fields_for :players, @roster.players.build do |x| %>
           # nested form
           ...
      <%end%>
      # form
      ...
<%end%>
</code>

Controlador para guardar def player_added

<code>@team = Team.find(params[:id])
@roster = @team.rosters.build(params[:roster])
@roster.save

...
</code>

fin

Esto fue un dolor en el extremo para que lo entendiera. ¡Espero que esto reduzca el tiempo para cualquiera de ustedes en busca de respuestas / aprendiendo formas anidadas!

Respuestas a la pregunta(1)

Su respuesta a la pregunta