簡単な TODO アプリケーションを書いているとしましょう。ユーザーが (メソッドを使用して) タスクを追加できるハードコードされたプロジェクトが 3 つあるfields_for
ため、基本的に、私のフォームは次のようになります。
# task.first_project, task.second_project and task.third_project are a scopes for
# retrieving tasks, which belongs to chosen project.
= form_for setup_project(@project) do |f|
h3 First project's tasks:
= f.fields_for :tasks, f.object.tasks.first_project do |ff|
= ff.text_field :title
= ff.hidden_field :project_id, value: 1
h3 Second project's tasks:
= f.fields_for :tasks, f.object.tasks.second_project do |ff|
= ff.text_field :title
= ff.hidden_field :project_id, value: 2
h3 Third project's tasks:
= f.fields_for :tasks, f.object.tasks.third_project do |ff|
= ff.text_field :title
= ff.hidden_field :project_id, value: 3
タスク フォーム リストの最後に空のタスク フォームを 1 つ追加するためのフォーム ヘルパーもあります。
def setup_project(project)
1.times { project.tasks.build }
project
end
そして、それが私の主な問題です。fields_for
フォームヘルパーのこのコードは、スコープなしで使用している場合にのみ完全に機能します。それらを追加すると、追加のフォーム ビルドが表示されません。
注意:上記の例は、私が実際にプログラミングしているものの非常に単純化されたバージョンです。アプリを書き直して、より動的なプロジェクトに機能などを追加するようにアドバイスしないでください。私を信じてください、それは本当にそのような奇妙な方法で動作する必要があります:)
助けてくれてありがとう!