Rails中的嵌套路由和URL中的点

时间:2013-04-26 11:50:22

标签: ruby-on-rails-3 routing controller routes

我正在为一些练习构建一个简单的待办事项应用程序。我有一些项目,其中包含任务和任务属于项目。

这样我就可以显示url / projects / 1 / tasks我正在嵌套路径:

的routes.rb

resources :projects do
  resources :tasks
end

在我的项目展示视图中,我有以下表格:

Add a task:
<%= form_for [@project, @task] do |f| %>
  <%= f.label :Task_name %>
  <%= f.text_field :name, :placeholder => "Task Name" %>
  <%= f.submit 'Create Task' %>
<% end %>

在我的任务控制器中,我正在执行以下操作:

def create
    @project = Project.find(params[:project_id])
    @task = @project.tasks.new(params[:task])
    if @task.save
      redirect_to projects_path(@project)
    else
      redirect_to projects_path(@project)
    end
  end

当我重定向并传入项目实例变量时,似乎在task.save上,它将我重定向到http://todoapp.dev/projects.5(5是项目的id),而不是http://todoapp.dev/projects/5

问题可能在我的控制器中使用redirect_to方法或可能是嵌套路由吗?

我对Rails路由有基本的了解,但可以使用一些建议。

1 个答案:

答案 0 :(得分:0)

在我的控制器中的redirect_to中,我正在使用路径的复数版本。 projects_path(@project)而不是project_path(@project)。

  def create
    @project = Project.find(params[:project_id])
    @task = @project.tasks.new(params[:task])
    if @task.save
      redirect_to project_path(@project)
    else
      redirect_to project_path(@project)
    end
  end

这最终起作用了。