Выпуск: Вместо того обновления вложенные атрибуты, они в настоящее время созданы поверх существующих вложенных атрибутов, когда я попал в #update
действие соответствующего features_controller.rb
Rails 4 НЕ обновлять вложенные атрибуты
Вероятно Причина: Я думаю, что проблема заключается в моем непонимании в Rails form_for
. Я думаю, что пробой в моих взглядах, как я оказывающими сохраняющихся вложенные атрибуты и/или как я не указать идентификатор вложенного атрибута, заставляя его просто создать новый один
feature.rb
class Feature < ActiveRecord::Base
...
has_many :scenarios
accepts_nested_attributes_for :scenarios,
allow_destroy: true,
reject_if: :all_blank
...
end
features_controller.rb
def update
...
project = Project.find(params[:project_id])
@feature = Feature.find(params[:id])
if @feature.update_attributes(feature_params)
# checking feature_params looks good...
# feature_params['scenarios'] => { <correct object hash> }
redirect_to project
else
render :edit
end
end
...
private
def feature_params
params.require(:feature).permit(:title, :narrative, :price, :eta, scenarios_attributes[:description, :_destroy])
end
_form.html.haml (упр lified)
= form_for [@project, @feature] do |f|
...
- if @feature.new_record? -# if we are creating new feature
= f.fields_for :scenarios, @feature.scenarios.build do |builder|
= builder.label :description, "Scenario"
= builder.text_area :description, rows: "3", autocomplete: "off"
- else -# if we are editing an existing feature
= f.fields_for :scenarios do |builder|
= builder.label :description, "Scenario"
= builder.text_area :description, rows: "3", autocomplete: "off"
Я уверен, что есть более хороший способ достичь if @feature.new_record?
проверки. Я также использую несколько Javascript крючков для создания форм динамических вложенных атрибутов (которые я оставил из), в значительной степени под влиянием Railscast #196 Nested Model Form (revised)
Я хотел бы действительно хороший Rails-у реализацию решения такого рода вложенные формы.
Добавил бы ': id' в часть': scene_attributes' вашего метода 'feature_params' исправить это? У вас есть только поле описания и возможность разрешить уничтожение. – jason328
да, это точно! – pruett