В нашем приложении rails 3.1.3 есть user и user_level. У пользователя много уровней user_level, а user_level принадлежит пользователю.
Запись user_level была успешно сохранена при создании объекта user_level в 'new', как показано ниже:
def new
@user = User.new
@user.user_levels.build
end
Однако запись user_level, добавленная со следующим кодом (by railscasts.com # 197), не была сохранена с @user:
def link_to_add_fields(name, f, association)
new_object = f.object.class.reflect_on_association(association).klass.new
fields = f.simple_fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
render :partial => association.to_s, :locals => {:f => builder, :i_id => 0}
end
link_to_function(name, "add_fields(this, \"#{association}\", \"#{j fields}\")")
end
Оба fields_for и simple_fields_for были испробованы без удачи. HTML-код для вставленного поля был сгенерирован f.simple_fields_for(association, new_object, :child_index => "new_#{association}")
. Но каким-то образом добавленное поле не было сохранено вместе с @ user.save.
В успешном случае объект уровня пользователя был создан в 'new' с @user.user_levels.build
. В неудачном случае объект был создан с f.object.class.reflect_on_association(association).klass.new
в 'link_to_add_fields'. Мы безуспешно пытались использовать obj.user_levels.build в link_to_add_fields.
Есть мысли о проблеме? Большое спасибо.
UPDATE:
вот строка ПЛОХОЙ, отправленная на сервер, когда выбраны 2 позиции:
{"name" => «pur eng», «login» => «tester10», «password» => «password», «password_confirmation» => «password», «user_type» => «employee», "user_levels_attributes" => {"1329335776431" => {"user_levels" => {"position" => "mech_eng"}, "_destroy" => "false"}, "1329335779261" => {"user_levels" => { "position" => "elec_eng"}, "_destroy" => "false"}}}
Вот ХОРОШАЯ строка, отправленная на сервер и успешно сохранившая уровни пользователя.
{"name" => «tester eng», «login» => «tester11», «password» => «пароль», «password_confirmation» => «пароль», «user_type» => «employee», "user_levels_attributes" => {"0" => {"position" => "elec_eng"}, "1" => {"position" => "inst_eng"}}}
Вызывает ли проблема дополнительный "user_levels" => в строке BAD? Если это так, как это удалить?