2011-12-21 3 views
2

중첩 작업이있는 List 개체가 있습니다. 개별 작업을 표시하는 페이지와 개별 작업을 편집 할 수있는 페이지를 만들었습니다. 이제는 작업 편집 페이지의 목록에서 작업을 삭제하는 기능을 추가하려고합니다. 다음 코드중첩 된 리소스에 대한 레일스 폐기 방법이 잘못되었습니다.

<%= link_to 'Delete this task',@task, confirm: 'Are you sure?', method: :delete %> 

를 사용하면이 코드는 내가 @task이 작업에 저장된 모든 데이터를 표시하는 호출 show.html.erb 페이지에

undefined task_path method 

산출, 그래서 나는 믿는다 이 문제는 일종의 라우팅 오류 일 수 있습니다. 그러나이를 파악할 수는 없습니다.

'관련 제어 방법은

def destroy 
    @task = Task.find(params[:id]) 
    @task.destroy 

    respond_to do |format| 
     format.html { redirect_to list_tasks_path(@task) } 
     format.json { head :ok } 
    end 
end 

내가 삭제 방법 내가 제공 한 @task 그냥 PARAMS을 통해 파괴하는 방법으로 전송 될 것이라고 생각하지만,이 오류는이 ISN을 보여주는 것 같다 정확히 어떻게 작동하는지. 그렇다면 어떻게 레일스에서 ​​중첩 된 리소스를 적절하게 파괴 할 수 있습니까?

편집 :

MyApp::Application.routes.draw do 
    resources :lists do 
     resources :tasks 
    end 
    get "home/index" 

    root :to => 'home#index' 
end 

여러분의 도움에 감사드립니다 : 여기에 중첩 된 자원 경로 파일입니다!

+0

경로 문제이므로 'routes.rb'를 질문에 추가하십시오. – Mischa

답변

5

당신은 @list 설치 또는 사용 @의 task.list을 가져야한다 (당신은 관계에 속하는 한 가정), 당신은 다음 작업을 수행 할 수 있습니다 :

<%= link_to "Delete this task", list_task_path(@task.list, @task), confirm: "Are you sure?", method: :delete %> 

건배!

<%= link_to 'Delete this task', list_task_path(@list, @task), confirm: 'Are you sure?', method: :delete %> 

을 또는 당신이 (당신이 그것을 쓴 것 같은) 더 컴팩트하려는 경우 :

+0

이것은 매력처럼 작동했습니다, 감사합니다! –

4

이 시도가 중첩 된 자원이 이후

<%= link_to 'Delete this task', [@list, @task], confirm: 'Are you sure?', method: :delete %> 

어느 방법, 당신이 통과해야 @list@task 개체

관련 문제