无法访问另一个模块中设置的类实例变量

时间:2013-12-02 14:49:47

标签: ruby

我无法使用

访问另一个模块中的类实例变量集
instance_variable_set("@#{key_name}", key_value)

如下例所示:

module Neo4jMapper
  module Node
    def self.included base
      base.extend NodeClassMethods
      base.send :prepend, NodeInstanceMethods
    end
  end

 module NodeInstanceMethods

   def initialize(prototype)
     # Set neo4jId
     @_id     = prototype["self"].split('/').last.to_i

     # Set properties
     for key in self.class.keys
       key_name = key[0]
       if prototype["data"].has_key?(key_name)
         key_value = prototype["data"][key_name] 
         instance_variable_set("@#{key_name}", key_value)
       end
     end
   end
 end 
end


class Person
  include Neo4jMapper::Node
  #....
end

实例化:

person = Person.create({:name => "neo4j_mapper", :email => "test@test.com"})

这将使用@name =“test@test.com”设置person对象(从调试器中查看)。但是以下行不起作用:

email = person.email # ERROR: undefined method `email' for #<Person:0x007fd2038b8508>

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您需要使用attr_accessor生成一个getter和setter。

attr_accessor :email

<强>参考