【发布时间】:2017-12-03 21:01:18
【问题描述】:
我有一个嵌套资源 projects/tasks/new 和一个 form_for,但我不知道如何自动生成所需的 URL:
module Projects
class Project < ApplicationRecord
has_many :tasks
end
end
module Projects
class Task < ApplicationRecord
belongs_to :project
end
end
# in view files
<%= form_for [@project, @task] do |f| %> # => produces URL of projects_project_tasks_path
我希望 URL 是 project_tasks_path,但 form_for 使用命名空间 Projects::Project 作为 URL 前缀。
我目前的解决方案是使用单独的 new.html.erb 和 edit.html.erb 查看文件来手动指定 URL:
# new.html.erb
<%= form_for @task, url: project_tasks_path(@project) do |f| %>
<%= render "form", f: f %>
<% end %>
# edit.html.erb
<%= form_for @task, url: project_task_path(@project, @task) do |f| %>
<%= render "form", f: f %>
<% end %>
这可行,但复制了不必要的代码。请注意,我将嵌套资源用于新建和编辑操作,因为我必须在任务资源上拥有项目上下文。
如何让form_for 生成所需的 URL 并拥有一个 form.html.erb 文件而不是 2 个?
【问题讨论】:
标签: ruby-on-rails forms namespaces