¿Cuál es la diferencia entre usar “:” y “@” en fields_for
Estoy configurando formularios incrustados en mi aplicación de rieles.
Esto no funciona
<code><h1>PlayersToTeams#edit</h1> <%= form_for @players_to_teams do |field| %> <%= field.fields_for @players_to_teams.player do |f| %> <%= f.label :IsActive %> <%= f.text_field :IsActive %> <% end %> <%= field.label :BT %> <%= field.text_field :BT %> <br/> <%= field.submit "Save", class: 'btn btn-primary' %> <% end %> </code>
Me da unActiveRecord::AssociationTypeMismatch
error. Observe la@players_to_teams.player
en elforms_for
línea.
Esto funciona:
<code><h1>PlayersToTeams#edit</h1> <%= form_for @players_to_teams do |field| %> <%= field.fields_for :player do |f| %> <%= f.label :IsActive %> <%= f.text_field :IsActive %> <% end %> <%= field.label :BT %> <%= field.text_field :BT %> <br/> <%= field.submit "Save", class: 'btn btn-primary' %> <% end %> </code>
Observe la:player
llamar alfields_for
línea.
¿Cuál es la diferencia entre usar un símbolo y usar una instancia? Pensaría que me gustaría usar una instancia en este caso, pero supongo que no?
Editar
modelos:
<code>class Player < ActiveRecord::Base has_many :players_to_teams has_many :teams, through: :players_to_teams end class PlayersToTeam < ActiveRecord::Base belongs_to :player belongs_to :team accepts_nested_attributes_for :player end </code>
controlador:
<code>class PlayersToTeamsController < ApplicationController def edit @players_to_teams=PlayersToTeam.find(params[:id]) end def update @players_to_teams=PlayersToTeam.find(params[:id]) respond_to do |format| if @players_to_teams.update_attributes(params[:players_to_team]) format.html { redirect_to @players_to_teams, notice: 'Player_to_Team was successfully updated.' } format.json { head :no_content } else format.html { render action: "edit" } format.json { render json: @players_to_teams.errors, status: :unprocessable_entity } end end end end </code>
Proyecto de ejemplo