0

Rails 3.2.8 サイトでは、次のエラーが表示されます。

Routing Error
No route matches {:controller=>"tasks", :action=>"complete", :list_id=>1, :id=>nil}

私のルートファイルには次のものがあります:

resources :lists do
  resources :tasks
end

match 'lists/:list_id/tasks/:id/complete' => 'tasks#complete', :as => :complete_task

ビューで:

<% @list.tasks.each do |task| %>
  <li><%= task.description %> - <%= button_to "Complete", 
                                    complete_task_path(@list.id, task.id) %></li>
<% end %>

レーキ ルートを実行する場合:

complete_task        /lists/:list_id/tasks/:id/complete(.:format) tasks#complete
4

2 に答える 2

0

次のように変更しないのはなぜですか?

<%= button_to "Complete", "/lists/#{@list.id}/tasks/#{task.id}/complete" %>

Rails マジックは時間を節約するためのものです - したがって存在します - しかし、それを使用する方法を理解するのにもっと時間がかかる場合は、そのマジックを使用しないことを選択することが理にかなっているかもしれません ;)

そして、デバッグ目的で、これにより元の問題が解決される可能性があるため、既存のタグのすぐ下に次を追加してli、変数を観察し、それらのいずれも nil でないことを確認します。

<li>List ID: <%=@list.id%>, Task ID: <%=task.id%></li>
于 2013-01-05T12:13:36.973 に答える
0

このエラーは、@list に関連付けられた 1 つ以上のタスクの ID が nil である可能性があります。最近のバージョンの Rails では、パスを生成するために nil 以外の ID を使用することに非常にこだわりがあります。

あなたが得ているエラーは、何かが間違っていることを伝えようとしています (まだ永続化されていないオブジェクトのルートを生成しています)。

@eriklinde のソリューションは「機能する」可能性がありますが (おそらく :id 値が欠落している無効なパスを出力します)、それは適切な形式ではありません。URL を手動で作成すると、後でパスを更新するのが難しくなり、アプリの問題が隠れている可能性があります。例で行ったように、可能な限りxxx_path ヘルプを使用する必要があります。

于 2013-01-10T20:42:51.180 に答える