【发布时间】:2011-01-16 02:41:25
【问题描述】:
我确定我遗漏了一些简单的东西,但不知道 Rails 中的正确术语,我找不到我要找的东西......
一个Project 模型has_many Task 和一个Task 属于一个Project。
我的routes.rb 有
resources :projects
resources :tasks
我可以创建/编辑/修改Projects 就好了,我也可以编辑Tasks...但我似乎无法弄清楚如何创建一个新的Task,分配正确的@987654330 @ 这样做时。
我的Project 页面(例如/projects/2)有一个指向/task/new 的添加任务链接,所以我失去了连接。我不想做一个嵌套资源,因为Tasks,一旦创建,就可以通过他们的 ID 来唯一识别,并且在未来还有很多其他模型。
这里有快速修复吗?
edit好吧,我已经设法解决了这个问题....它很丑,很可怕,我不知道为什么必须这样,但它确实有效。
我的路线:
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 out嵌套路由。对于如此常见的任务,这似乎也很费力,但它确实有效,所以....我想这一切都很好。
【问题讨论】:
标签: ruby-on-rails activerecord models formtastic