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对象
谢谢你的帮助!
尽管直接获取这样的实例变量被认为是不好的形式,因为 usingattr_accessor
是首选方法,但这个特定实例中的问题是没有名为 的实例变量@content
。您所拥有的似乎是 ActiveRecord 属性。
这些是使用不同的机制获取的:
@d_tree.attributes[:content]
Run Code Online (Sandbox Code Playgroud)
一般来说,这甚至有点多余,因为这将不必要地创建属性哈希的副本。典型的访问方式是:
@d_tree.content
Run Code Online (Sandbox Code Playgroud)
这些值实际上位于@attributes
ActiveRecord 管理的实例变量中。