#ruby-on-rails-3 #nested-forms
#ruby-on-rails-3 #вложенные формы
Вопрос:
У меня есть трехуровневая вложенная форма, но третий класс не сохранен.
У меня есть три класса моделей (упрощенных)
class A
has_one :b
accepts_nested_attributes_for :b
end
и
class B
belongs_to :a
has_many :c
accepts_nested_attributes_for :c
end
и
class C
belongs_to :b
end
Мой взгляд (упрощенный)
<%= form_for [@a] do |f| -%>
<%= f.fields_for :b do |b_form| -%>
<%= b_form.fields_for :c do |c_form| -%>
<% end %>
<% end %>
<% end %>
Контроллер
def new
@a= A.new
b = @a.b = B.new
b.c.build
end
def create
if (@a= A.create(params[:a])).valid?
//flash succes
end
end
Хэш выглядит следующим образом:
{"a"=>{"title"=>"test", "body"=>"<p>test</p>rn<br />", "b_attributes"=>{"title"=>"testt", "c_attributes"=>{"0"=>{"title"=>"testtt"}}}}}
Но создаются только A и B. C — это не так, он не выдает ошибку или что-то в моих журналах..
Спасибо!
Редактировать:
Решение (благодаря Zabba)
добавить attr_accessible :c_attributes
в class B
Комментарии:
1. Попробуйте добавить
attr_accessible :c_attributes
вclass B
.2. какие-либо проверки в
C
иattr_*
в B?
Ответ №1:
Попробуйте добавить attr_accessible :c_attributes
в class B
(должно быть включено в ответ)
Ответ №2:
Контроллер
def new
@a= A.new
b= @a.b.build
b.c.build
end
def create
@a = A.new(params[:a])
if @a.valid?
//flash succes
end
end