2017-12-26 12 views
1

Haben Modell mit Aufgaben, die sie getan werden und todo. In Sicht haben Link und wenn Sie auf den Link klicken, muss die Aufgabe von Todo zu erledigt geändert werden. Es ist meine RoutenWarum wird falsch umgeleitet?

get 'tasks/:id', to: 'tasks#change_to_done', as: 'change_to_done' 

meiner Ansicht

<% unless task.done %> 
     <td><%= check_box_tag "cb_tasks[]", task.id %></td> 
     <td><%= link_to task.title, task %></td> 
     <td><%= link_to 'Edit', edit_task_path(task.id) %></td> 
     <td><%= link_to 'Done', change_to_done_path(task.id) %></td> 
     <td><%= link_to 'Destroy', task, method: :delete, data: {confirm: 'Are you sure?'} %></td> 
     <% end %> 

und mein Controller

def change_to_done 
    @task = Task.find(params[:id]) 
    @task.done = true 
    @task.save 
    end 

, wenn Sie den Link Umleiten zur Show Pfad klicken

Started GET "/tasks/32" for 127.0.0.1 at 2017-12-26 11:59:06 +0200 
Processing by TasksController#show as HTML 
    Parameters: {"id"=>"32"} 
    Task Load (0.1ms) SELECT "tasks".* FROM "tasks" WHERE "tasks"."id" = ? LIMIT ? [["id", 32], ["LIMIT", 1]] 
    Rendering tasks/show.html.erb within layouts/application 
    Rendered tasks/show.html.erb within layouts/application (0.7ms) 
Completed 200 OK in 57ms (Views: 55.0ms | ActiveRecord: 0.1ms) 

Was ist los? Ich muss nur den Feldzustand von falsch zu wahr ändern.

Antwort

2

Schienenrouten werden in der angegebenen Reihenfolge abgeglichen. Wenn Sie also eine resources :tasks über einer get 'task/:id' haben, wird die Route der show action für die Ressourcenlinie vor der get-Linie abgeglichen.

Versuchen Sie, den Endpunkt, zum Beispiel zu ändern:

get 'change_to_done/:id', to: 'tasks#change_to_done', as: 'change_to_done' 
1

Sie resources :tasks in Ihren Routen-Datei haben könnten. Rails behebt dies und ignoriert get 'tasks/:id', to: 'tasks#change_to_done', as: 'change_to_done' diese Route. Sie sollten die genaue Aktion get 'tasks/:id/change_to_done', to: 'tasks#change_to_done', as: 'change_to_done'

angeben