删除功能无法正常工作

时间:2015-02-06 15:24:50

标签: ruby-on-rails ruby

我的删除功能有问题。我做了以下事情:

设置路线:

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'for []:Array

关于这里出了什么问题的任何想法?

2 个答案:

答案 0 :(得分: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

如果您仍然希望有一个后备,请添加一个救援声明 - destroy永远不会返回false,它会成功或引发异常。

答案 1 :(得分:0)

正如@ptd在评论中指出的那样,您正在删除对象,然后再次尝试删除它们。我会将您的代码更改为:

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 

虽然这段代码可行,但@ BroiSatse的答案更好,因为检查针对空数组的if语句无法实现任何有用的功能。