13

次のモデルで簡単なアプリを作成しようとしています: カテゴリ --[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)を作成するためにすべて同じコードを使用しています。私はすべての関係、強力なパラメーター、ネストされた属性、およびコントローラーを構成しましたが、それは私にとってはうまく機能します。

2 つの質問:

  1. カテゴリ/_form.haml.html で複数の質問を作成する方法は?

  2. カテゴリ + 複数の質問 + 各質問ごとに複数の回答を一度に作成する方法 (categories/_form.haml.html 内)?

私は 2 番目のものを達成する方法を見つけようと数時間を費やしましたが、見つけたすべての情報は 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:

ここで何が欠けていますか?

4

2 に答える 2

3

ここで詳細に説明されていると思うので、最初の 2 つの質問には答えません: http://railscasts.com/episodes/196-nested-model-form-part-1

エラーについてのヒントをいくつか教えてください。プロになりたいなら、エラーメッセージとスタックトレースの読み方を本当に学ばなければなりません。

undefined methodしたがって、ここでは# に対する質問 を示すエラーの詳細な説明を示します。

まず、完全なスタック トレースを提供することが非常に重要です。これは、行番号が含まれているためです。問題を解決するには、行番号が重要です。

ここで問題の行は= q.simple_fields_for :answers, q.questions.build do |a|

メッセージを見ると、オブジェクトqのタイプは であることが示されていますFormBuilderform_forこれは、またはを呼び出したときに Rails がインスタンス化するオブジェクトですfields_for。SimpleForm を使用する場合は、simple_form_forおよびsimple_fields_forにも含まれますが、拡張バージョン (ほとんどの場合、装飾バージョンと呼ばれます) です。

このオブジェクトqにはメソッドがquestionありません。fields_forメソッドがラップする基になるオブジェクトにアクセスしたいと思います。経由でこれにアクセスできますq.object(詳細については、この投稿を参照してくださいRails - Using form_for and fields_for, how do you access the subobject while in the fields_for block? )。

answersあなたの場合、私はvsの混合も想定していますquestionsq.simple_fields_for :answers, q.object.answers.buildこれはの代わりにすべきだと思いますq.simple_fields_for :answers, q.questions.build

于 2013-10-13T18:13:17.673 に答える