使用simple_form和rails 4创建多个嵌套表单
我正在尝试使用以下模型创建一个简单的应用程序:类别 – [has_many] – >问题 – [has_many] – >答案
我有以下用于创建类别+问题的代码(categories / _form.haml.html):
= simple_form_for(@category) do |f| = f.error_notification = f.input :title, label: "Category title: " = f.simple_fields_for :questions, @category.questions.build do |q| = q.input :content, label: "Question content: " = f.button :submit
我正在使用所有相同的代码来创建问题+答案(questions / _form.haml.html)。 我有所有的关系,强大的参数,嵌套的attrs和控制器配置,它对我来说很好。
两个问题:
-
如何在类别/ _form.haml.html中创建多个问题?
-
如何一次为每个问题创建类别+多个问题+多个答案(在类别/ _form.haml.html中)?
我花了几个小时试图弄清楚如何完成第二个,我能找到的所有信息都与Rails 3.0和form_for有关。 他们都没有为我工作。
这里最直接的解决方案应该是这样的:
= simple_form_for(@category) do |f| = f.error_notification = f.input :title, label: "Category title: " = f.simple_fields_for :questions, @category.questions.build do |q| = q.input :content, label: "Question content: " = q.simple_fields_for :answers, q.questions.build do |a| = a.input :content, label: "Answer content" = f.button :submit
但它给了我
undefined method `questions' for #<SimpleForm::FormBuilder:
我在这里想念的是什么?
你在这里弄错了: = q.simple_fields_for :answers, q.questions.build do |a|
您在构建器对象q
而不是模型对象上调用questions
方法。 可能你想要这个:
= q.simple_fields_for :answers, q.object.questions.build
我不打算回答前两个问题,因为我认为这些问题在此深入解释: http : //railscasts.com/episodes/196-nested-model-form-part-1
我只想给你一些关于错误的提示。 如果你想成为一名专业人士,你真的必须学习如何阅读错误信息和堆栈跟踪。
所以这里是一个错误的详细解释,说明#的undefined method
问题
首先,提供完整的堆栈跟踪非常重要。 那是因为它们包含行号。 在解决问题时,行号很重要。
我猜这里有问题的行是= q.simple_fields_for :answers, q.questions.build do |a|
如果你看一下这条消息,就说对象q
的类型是FormBuilder
。 这是rails调用form_for
或fields_for
时实例化的对象。 当你使用SimpleForm时,它也在simple_form_for
和simple_fields_for
,但是是扩展版本(通常称为装饰版本)。
这个对象q
没有方法question
,永远不会! 我假设您要访问fields_for
方法包装的基础对象。 您可以通过q.object
访问它(有关更多信息Rails,请参阅此文章- 使用form_for和fields_for,如何在fields_for块中访问子对象? )。
在你的情况下,我也假设answers
和questions
的混合。 我认为这应该是q.simple_fields_for :answers, q.object.answers.build
而不是q.simple_fields_for :answers, q.questions.build
。
- Rails以月为单位计算日期范围
- 如何使用无头铬与水豚和selenium
- validates_inclusion_of,acts_as_tree和rspec的问题
- OSX Mavericks之后无法加载此类文件 – 脚本/../config / boot(LoadError)
- 调整Nokogiri连接的超时
- 如何通过它的会话ID找到设计用户?
- 使用带远程的ajax的Ruby表单:true给出了ActionController :: InvalidAuthenticityToken错误。 经典提交没有
- 多个线程调用相同的函数
- SQLite3 :: SQLException:没有这样的表:messages:SELECT“messages”。* FROM“messages”