0

こんにちは、ネストされたオブジェクトを削除するためのリンクを追加するのに苦労しています。このようにネストされた多くのタスクを持つリストアプリケーションがあります。

resources :lists do
  resource :tasks
end

この投稿を読みましたが、うまくいきません。以下のこのコードで削除するリンクが必要です

    <h4>Tasks</h4>
<% @list.tasks.each do |task| %>
    <%= task.desc %>
    <%= link_to "Delete", list_task_path(list, task), :method => :delete %><br />
<% end %>

しかし、それは私に次のエラーを与えます

undefined local variable or method `list' for #<#<Class:0x007f9adc555db0>:0x007f9adc547828>

編集:ページを更新すると、次のエラーが表示されるようになりました

No route matches {:action=>"show", :controller=>"tasks", :list_id=>#<List id: 28, name: "Julklappar", user_id: 1, created_at: "2012-12-22 17:40:05", updated_at: "2012-12-22 17:40:05">, :id=>#<Task id: nil, desc: nil, completed: false, list_id: 28, created_at: nil, updated_at: nil>}

レーキ ルート:

pierre@ubuntu:~/todolist$ rake routes
              list_tasks GET    /lists/:list_id/tasks(.:format)          tasks#index
                         POST   /lists/:list_id/tasks(.:format)          tasks#create
           new_list_task GET    /lists/:list_id/tasks/new(.:format)      tasks#new
          edit_list_task GET    /lists/:list_id/tasks/:id/edit(.:format) tasks#edit
               list_task GET    /lists/:list_id/tasks/:id(.:format)      tasks#show
                         PUT    /lists/:list_id/tasks/:id(.:format)      tasks#update
                         DELETE /lists/:list_id/tasks/:id(.:format)      tasks#destroy
                   lists GET    /lists(.:format)                         lists#index
                         POST   /lists(.:format)                         lists#create
                new_list GET    /lists/new(.:format)                     lists#new
               edit_list GET    /lists/:id/edit(.:format)                lists#edit
                    list GET    /lists/:id(.:format)                     lists#show
                         PUT    /lists/:id(.:format)                     lists#update
                         DELETE /lists/:id(.:format)                     lists#destroy
        new_user_session GET    /users/sign_in(.:format)                 devise/sessions#new
            user_session POST   /users/sign_in(.:format)                 devise/sessions#create
    destroy_user_session DELETE /users/sign_out(.:format)                devise/sessions#destroy
           user_password POST   /users/password(.:format)                devise/passwords#create
       new_user_password GET    /users/password/new(.:format)            devise/passwords#new
      edit_user_password GET    /users/password/edit(.:format)           devise/passwords#edit
                         PUT    /users/password(.:format)                devise/passwords#update
cancel_user_registration GET    /users/cancel(.:format)                  devise/registrations#cancel
       user_registration POST   /users(.:format)                         devise/registrations#create
   new_user_registration GET    /users/register(.:format)                devise/registrations#new
  edit_user_registration GET    /users/edit(.:format)                    devise/registrations#edit
                         PUT    /users(.:format)                         devise/registrations#update
                         DELETE /users(.:format)                         devise/registrations#destroy
                    root        /                                        lists#index

編集#2これは私のリスト/ show.html.erbファイルです

<p id="notice"><%= notice %></p>

<h2><%= @list.name %></h2>

    <h4>Tasks</h4>
    <% @list.tasks.each do |task| %>
        <%= task.desc %>
        <%= link_to "Delete", list_task_path(@list, task), :method => :delete %>
    <% end %>

<%= form_for [@list, @task] do |form| %>

    <p><%= form.text_field :desc %> <%= form.submit %></p>

<% end %>

<%= link_to 'Edit', edit_list_path(@list) %> |
<%= link_to 'Back', lists_path %>

リストコントローラー

  def show
    @list = current_user.lists.find(params[:id])
    @task = @list.tasks.new
  end
4

1 に答える 1

1

リンクは次のとおりです。

<%= link_to "Delete", list_task_path(@list, task), :method => :delete %>

をループするときは、 -を介して@list.tasksローカライズするだけですが、常に のままです。task|task|@list@list

他の問題はコントローラにあります: @task = @list.tasks.new- フォームに必要な新しいタスクをここに作成します。ただし、このタスクは新しいため、まだ保存されていません。データベースにまだ存在しないため、削除するためのリンクを作成することはできません。これは、コントローラーではなくフォームで直接タスクを作成することで回避できます。

コントローラーで次の行を削除します。

@task = @list.tasks.new

フォームを次のように変更します。

<%= form_for [@list, @list.tasks.build] do |form| %>
于 2013-01-13T20:16:17.087 に答える