ruby-on-rails - 为什么我不能在 Ruby 中销毁这个变量?

标签 ruby-on-rails ruby

在 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/

相关文章:

ruby-on-rails - 如何使名为范围的搜索逻辑返回 DISTINCT(非重复项?)

ruby-on-rails - 显示文章摘要时如何修剪文本?

ruby-on-rails - Rspec中expect和is_expected.to的区别

ruby-on-rails - 清除旧的 Rails 迁移文件是个好主意吗?

ruby-on-rails - nginx http 代理状态 400 "400 Bad Request"带 SSL 客户端身份验证和 Rails

ruby-on-rails - Rails : Single page website, 如何组织 Controller / View 等

ruby-on-rails - 在 cucumber .feature 文件中传递数组值

html - 如何将缩略图照片添加到 ruby​​ on rails 中的页眉?

ruby - 正则表达式中的 `\.` 和 `i` 是什么?

ruby-on-rails - 我想制作一个 Rails 模型,但我不想将它存储在数据库中