深嵌套导轨4表格

我有3个模型Item接受嵌套的问题和问题属性接受嵌套的答案属性。 我正在尝试以相同的forms创建一个有问题和答案的项目。

item.rb的

class Item < ActiveRecord::Base has_many :questions, dependent: :destroy accepts_nested_attributes_for :questions end 

question.rb

 class Question < ActiveRecord::Base belongs_to :item has_many :answers, dependent: :destroy accepts_nested_attributes_for :answers end 

answer.rb

 class Answer < ActiveRecord::Base belongs_to :question end 

item_controller.rb

 class ItemsController  [:content, :helper_text, :kind], :answers_attributes => [:content, :correct]) end end 

_form.haml

 = simple_form_for(@item) do |f| = f.input :kind = f.input :content = f.simple_fields_for :questions do |q| = q.input :content = q.simple_fields_for :answers do |a| = a.input :content = f.submit 

表单正确显示,并正确保存问题模型。 我似乎无法保存答案

我已经看过很多在线帮助,但没有人用Rails 4强大的参数覆盖它。

我认为你的问题在于你强大的障碍:

 def item_params params.require(:item).permit(:id, :content, :kind, questions_attributes: [:content, :helper_text, :kind, answers_attributes: [:content, :correct]]) end 

基本上,当您传递深层嵌套表单(您有多个依赖模型)时,您必须将属性作为其他模型属性的一部分传递。 你把params分开了

我遇到了类似的问题,虽然理查德佩克的回答也帮助了我,但有一件事对我来说是缺失的。

如果您是深度嵌套,则需要指定嵌套项的父级的id。 在这种情况下,要创建answers您需要使用q.input :id明确questions q.input :id ,否则您将遇到此错误 。

 = simple_form_for(@item) do |f| = ... = f.simple_fields_for :questions do |q| = ... = q.input :id = q.simple_fields_for :answers do |a| = ... = f.submit