Come usare fields_for per l'aggiornamento bambino in 1-a-molti in Rails 3.1.3?
-
25-10-2019 - |
Domanda
Un utente ha molti user_levels e user_level appartiene ad un utente. Ecco il codice per user_level per l'aggiornamento:
<%= simple_form_for @user do |f| %>
<% @user.user_levels.each do |level| %>
<%= f.fields_for :user_levels, level do |builder| %>
<p><%= render :partial => 'user_levels', :locals => {:f => builder, :i_id => level.position} %></p>
<% end %>
<% end %>
<% end %>
Il codice sopra visualizzerà l'user_level corrente con serie selezionata alla posizione corrente. Il problema è che l'aggiornamento non è stato salvato per user_level.
Questa è l'user_levels parziale
<div class="fields">
<%= f.input :position, :collection => return_position, :prompt => "Choose position",
:label => false, :include_blank => true, :selected => i_id %>
<%= link_to_remove_fields "remove", f %>
</div>
Questa è la stringa inviato al server per l'params [:] utenti. Attualmente ci sono due posizioni per l'utente e uno viene eliminato come aggiornamento:
{"name"=>"test eng", "login"=>"tester12", "password"=>"password", "password_confirmation"=>"password", "user_type"=>"employee", "user_levels_attributes"=>{"0"=>{"id"=>"5"}, "1"=>{"position"=>"elec_eng", "_destroy"=>"false", "id"=>"6"}}}
Qualsiasi soluzione per l'aggiornamento del bambino? Grazie mille
UPDATE:
def new
@user = User.new
end
def create
@user = User.new(params[:user])
@user.input_by_id = session[:user_id]
if @user.save!
redirect_to URI.escape("/view_handler?index=0&msg=saved!")
else
flash.now[:error] = 'not saved!'
render 'new'
end
end
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
@user.input_by_id = session[:user_id]
if @user.update_attributes(params[:user])
redirect_to URI.escape("/view_handler?index=0&msg=saved}")
else
flash.now[:error] = 'not saved!'
render 'edit'
end
end
user.rb:
has_many :user_levels, :dependent => :destroy
accepts_nested_attributes_for :user_levels, :reject_if => lambda { |a| a[:position].blank? }, :allow_destroy => true
validates_associated :user_levels
Soluzione
Prova a rimuovere il @user.user_levels.each do |level|
di linea e si prega di inviare ciò che problema si apre poi.
E fa il modello utente accetta gli attributi nidificati per livelli utente?