2015-02-06 3 views
0

삭제 기능에 문제가 있습니다.삭제 기능이 제대로 작동하지 않습니다.

설정 경로 :

resources :todos do 
member do 
    delete :destroy_all 
end 
end 

는 링크에게 index.html.erb

<%= link_to "Delete last seven days", destroy_all_todo_path(@todos), class: 'btn btn-success', method: :delete %> 

를 설정하고 내 컨트롤러에 다음과 같은 방법을 정의 :

나는 다음과 같은했다
def destroy_all 
@todo = Todo.where("created_at <= ?", Time.now - 7.days).destroy_all 
if @todo.destroy 
flash[:notice] = "Your old todos are deled!" 
else 
flash[:error] = "There was an error!" 
end 

하지만 실행하려고하면 []에 대해 erro : undefined 메서드`destroy '가 발생합니다.

무엇이 잘못되고 있는지에 대한 아이디어가 있습니까?

+0

이미'destroy_all'을 실행 한 후에'if @ todo.destroy'가 무엇을하는지 상상해보십시오. '@ todo'에 어떤 가치가 있습니까? 여기에있는 'if'문은 의미가 없다는 것이 분명해야한다고 생각합니다. – ptd

답변

3

이 줄 :

@todo = Todo.where("created_at <= ?", Time.now - 7.days).destroy_all 

모든 모델을 파괴하고 당신에게 삭제 된 레코드의 배열을 반환합니다. 그런 다음 해당 배열에서 destroy으로 전화하십시오.

일반적으로 destroy_all이 성공했는지 확인할 필요가 없습니다. 적어도 실패한 경우는 하나도 없었습니다. 그냥 할 : 당신은 여전히 ​​대체를 선호하는 경우

def destroy_all 
    Todo.where("created_at <= ?", Time.now - 7.days).destroy_all 
    flash.now[:notice] = "Your old todos are deled!" 
end 

, 구출 문을 추가 - 당신이 false를 반환하지 않습니다 파괴가 성공하거나 예외를 발생합니다.

0

의견에 @ptd가 기록되어 있으므로 개체를 삭제 한 다음 다시 삭제하려고합니다. 나는이에 코드를 변경합니다 :이 코드는 작동하지만 BroiSatse의 대답은 더 @, 하늘의 배열에 대해 그 if 문을 확인하는 유용한 아무것도 달성하지 않기 때문에

def destroy_all 
@todos = Todo.where("created_at <= ?", Time.now - 7.days) 
if @todos.destroy_all 
flash[:notice] = "Your old todos are deled!" 
else 
flash[:error] = "There was an error!" 
end 

.

관련 문제