fields_for - 加载所有记录有多少关系?

时间:2012-05-04 18:04:49

标签: ruby-on-rails

我想在项目中添加一些新任务。该项目目前有超过1000个任务。

当我使用fields_for

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

它似乎加载了所有相关的任务,即使该表单仅适用于一个新任务。这是fields_for应该如何表现还是我错过了什么?

2 个答案:

答案 0 :(得分:2)

替换:

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

使用:

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

这是一对多关系,因此您必须提供许多(即:数组)对象。 [obj]为您提供。

答案 1 :(得分:1)

  

这就是fields_for应该如何表现还是我错过了什么?

如果您正在使用fields_for和accepts_nested_attributes_for等,那么这是它应该如何表现的。这个范例主要用于同时添加/编辑(项目和任务对象)时。

如果您只想一次添加一个任务,我建议您只创建一个任务MVC,然后将其嵌套在项目资源下。换句话说,通过嵌套它(即../projects/2/tasks/new),你总是在上下文中有一个项目。这里唯一需要注意的是你必须有一个现有项目来添加任务(与上面的fields_for范例不同)。

如果您还不熟悉嵌套资源,这些docs会有所帮助。