在 Rails 控制台中,我这样做:
input = Input.create :name => "foo"
=> #<Input id: 8, name: "foo", created_at: "2013-05-07 11:45:17", updated_at: "2013-05-07 11:45:17">
Input.all
=> [#<Input id: 8, name: "foo", created_at: "2013-05-07 11:45:17", updated_at: "2013-05-07 11:45:17">]
input
=> #<Input id: 8, name: "foo", created_at: "2013-05-07 11:45:17", updated_at: "2013-05-07 11:45:17">
input.destroy
=> #<Input id: 8, name: "foo", created_at: "2013-05-07 11:45:17", updated_at: "2013-05-07 11:45:17">
> Input.all
=> []
> input
=> #<Input id: 8, name: "foo", created_at: "2013-05-07 11:45:17", updated_at: "2013-05-07 11:45:17">
> input.reload
ActiveRecord::RecordNotFound: Couldn't find Input with id=8
> input
=> #<Input id: 8, name: "foo", created_at: "2013-05-07 11:45:17", updated_at: "2013-05-07 11:45:17">
我真正希望看到的是这样的:
> input
=> nil
对象已从数据库中删除,但变量仍然存在并且仍在尝试指向它。怎么回事?
最佳答案
input
变量存储对内存中实例的引用。销毁记录将从数据库中删除该行。尝试查找记录时调用 input.reload
( docs ) 会引发异常,但不会代表您将变量的值设置为 nil
。
此行为在 DELETE 请求的范围内非常有用,您希望在该范围内显示有关已删除对象的信息。例如:
class WidgetsController < ApplicationController
def destroy
@widget = Widget.find(params[:id])
@widget.destroy
respond_with @widget, notice: "You successfully removed #{@widget.name}"
end
end
关于ruby-on-rails - 为什么我不能在 Ruby 中销毁这个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16418303/