Ruby on rails 组合作用域字段和一个附加表单呈现
假设我正在编写一个简单的TODO应用程序。有三个硬编码项目,用户可以向其中添加任务(使用方法的字段),因此基本上,我的表单如下所示:Ruby on rails 组合作用域字段和一个附加表单呈现,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,假设我正在编写一个简单的TODO应用程序。有三个硬编码项目,用户可以向其中添加任务(使用方法的字段),因此基本上,我的表单如下所示: # 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
# 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
我还有一个表单助手,用于在任务表单列表末尾添加一个空任务表单:
def setup_project(project)
1.times { project.tasks.build }
project
end
这就是我的主要问题。只有当我对使用fields\u而不使用任何作用域时,form helper中的这段代码才能完美工作。当我添加它们时,不会显示额外的表单构建
请注意:上面的示例只是我实际编程的一个非常简化的版本。请不要建议我重写我的应用程序,让更多的动态项目添加功能或类似的东西。相信我,它确实需要以一种奇怪的方式工作:)
谢谢你的帮助 我已通过使用以下代码使其正常工作:
# task.first_project, task.second_project and task.third_project are a scopes for
# retrieving tasks, which belongs to chosen project.
= form_for @project do |f|
h3 First project's tasks:
= f.fields_for :tasks, setup_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, setup_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, setup_tasks(f.object.tasks.third_project) do |ff|
= ff.text_field :title
= ff.hidden_field :project_id, value: 3
表格:
def steup_tasks(tasks)
tasks << tasks.build
end
def steup_任务(任务)
任务