红宝石instance_variable_get返回nil

ser*_*laz 5 ruby ruby-on-rails

我的instance_variable_get方法有问题,因为它总是返回一个对象实例为nil的对象。这是我的代码:

logger.info "ASDF: " + @d_tree.inspect
logger.info "ASDF: " + @d_tree.instance_variable_get(:@content);
Run Code Online (Sandbox Code Playgroud)

输出为:

ASDF: #<DTree id: 11, parent_id: nil, content: "bababababa", subsidiary_info: "", deep_info: "blabla", title: "hello", direction: 1, created_at: "2010-10-26 19:27:32", updated_at: "2010-11-01 23:14:31", color: 2, cell_color: 2, howtoinfo: "howtoinfooo", textinfo: "textInfooo", locationinfo: "locationInfoooo", productinfo: "productinfoooo">
TypeError (can't convert nil into String):
    /app/controllers/d_trees_controller.rb:38:in `+'
Run Code Online (Sandbox Code Playgroud)

根据检查,该对象似乎很好,但是instance_variable_get返回一个nil对象

谢谢你的帮助!

tad*_*man 2

尽管直接获取这样的实例变量被认为是不好的形式,因为 usingattr_accessor是首选方法,但这个特定实例中的问题是没有名为 的实例变量@content。您所拥有的似乎是 ActiveRecord 属性。

这些是使用不同的机制获取的:

@d_tree.attributes[:content]
Run Code Online (Sandbox Code Playgroud)

一般来说,这甚至有点多余,因为这将不必要地创建属性哈希的副本。典型的访问方式是:

@d_tree.content
Run Code Online (Sandbox Code Playgroud)

这些值实际上位于@attributesActiveRecord 管理的实例变量中。