1

プロジェクトにいくつかの新しいタスクを追加したいと思います。プロジェクトには現在1000を超えるタスクがあります。

fields_forを使用する場合

=form_for @project do |f|
  =f.fields_for :tasks, @project.tasks.build do |task_fields|
    =task_fields.text_field :name

フォームが1つの新しいタスク専用であるにもかかわらず、関連するすべてのタスクをロードしているようです。これはfields_forの動作方法ですか、それとも何かが足りませんか?

4

2 に答える 2

2

交換:

  =f.fields_for :tasks, @project.tasks.build do |task_fields|

と:

  =f.fields_for :tasks, [@project.tasks.build] do |task_fields|

これは1対多の関係であるため、多くの(つまり配列)オブジェクトを提供する必要があります。はあなたの[obj]ためにそれを作ります。

于 2012-05-04T18:38:56.617 に答える
1

これはfields_forの動作方法ですか、それとも何かが足りませんか?

fields_forやaccepts_nested_attributes_forなどを使用している場合は、そうです。これが想定される動作です。このパラダイムは主に、両方(プロジェクトオブジェクトとタスクオブジェクト)を同時に追加/編集する場合に使用されます。

一度に1つのタスクを追加するだけの場合は、タスクMVCを作成して、プロジェクトリソースの下にネストすることをお勧めします。言い換えれば、それをネストすることによって(つまり、.. / projects / 2 / tasks / new)、常にコンテキスト内のプロジェクトがあります。ここでの唯一の注意点は、タスクを追加するために既存のプロジェクトが必要になることです(上記のfields_forパラダイムとは異なります)。

ネストされたリソースにまだ精通していない場合は、これらのドキュメントが役立ちます。

于 2012-05-04T21:35:53.007 に答える