我确定我遗漏了一些简单的东西,但不知道 Rails 中的正确术语,我找不到我要找的东西....
一个Project
模型 has_manyTask
和一个Task
belongs_to a Project
。
我的routes.rb
有
resources :projects
resources :tasks
Projects
我可以很好地创建/编辑/修改,我也可以编辑Tasks
......但我似乎无法弄清楚如何创建一个新的,在这样做时Task
分配正确的。Project
我的Project
页面(例如 /projects/2)有一个添加任务链接,该链接指向 /task/new,所以我失去了连接。我不想创建一个嵌套资源,因为Tasks
一旦创建,它们的 ID 将是唯一可识别的,并且在未来 has_many 其他模型也是如此。
这里有快速修复吗?
编辑好吧,我已经设法解决了这个问题....它很丑而且很可怕,我不确定为什么必须这样,但它确实有效。
我的路线:
resources :projects do
resources :tasks, :only => [:new]
end
resources :tasks, :except => [:new]
我的任务控制器:
def new
@project = Project.find(params[:project_id])
@task = @project.tasks.build
end
# Process the form for creating a new task.
def create
@project = Project.find(params[:task][:project_id])
@task = @project.tasks.build(params[:task])
if @task.save
flash[:success] = 'Task created.'
redirect_to project_path(@project)
else
render 'new'
end
end
还有我的任务表:
<%= semantic_form_for @task do |f| %>
<%= render 'shared/form_message', :object => f.object %>
<%= f.inputs do %>
<%= f.input :name %>
<%= f.input :project %>
<% end %>
<ul class="formActions">
<li class="list"><%= link_to 'Back to list', project_path(@task.project) %></li>
<li><%= f.submit "Save" %></li>
</ul>
<% end %>
我不想将项目框放在表单上,我仍然不确定为什么必须这样做,以及为什么需要将 :create排除在嵌套路由之外。对于如此常见的任务,这似乎也很费力,但它确实有效,所以....我想这一切都很好。