Как использовать fields_for для дочернего обновления в 1-ко-многим в рельсах 3.1.3? - PullRequest
0 голосов
/ 16 февраля 2012

У пользователя много уровней user_level, а user_level принадлежит пользователю.Вот код для user_level для обновления:

<%= 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 %>

Приведенный выше код будет отображать текущий user_level с выбранным набором для текущей позиции.Проблема в том, что обновление не было сохранено для user_level.

Вот частичное user_levels

<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>

Вот строка, отправленная на сервер для params [: user].В настоящее время у пользователя есть две позиции, одна из которых удаляется как обновление:

{"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"}}}

Есть ли решение для дочернего обновления?Большое спасибо

ОБНОВЛЕНИЕ:

  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

1 Ответ

1 голос
/ 16 февраля 2012

Попробуйте удалить строку @user.user_levels.each do |level| и, пожалуйста, опубликуйте, какая проблема всплывает.И принимает ли пользовательская модель вложенные атрибуты для пользовательских уровней?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...