0

練習用に簡単な todo アプリを作成しています。has_many のタスクとタスクが属しているプロジェクトがあります。

url/projects/1/tasks を表示できるように、ルートをネストしています。

ルート.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/ではなく、 http: //todoapp.dev/projects.5 (5 はプロジェクトの ID) にリダイレクトされます。プロジェクト/5 .

問題は、redirect_to メソッドまたはネストされたルートを使用するコントローラーにある可能性がありますか?

私は Rails ルーティングの基本的な理解を持っていますが、いくつかのアドバイスを使用できます。

4

1 に答える 1

0

コントローラーの redirect_to のように見えますが、複数形のパスを使用していました。project_path(@project) の代わりに projects_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

これは最終的に機能しました。

于 2013-04-26T11:54:15.867 に答える