我的应用程序控制器中有一个自定义类。如下所示:
class Defaults
def initialize
@value_1 = "1234"
@value_2 = nil
@data = Data.new
end
end
class Data
def initialize
@data_1 = nil
end
end
现在在我的控制器方法中,我创建了一个类型为Defaults
def updateDefaultValues
defaults = Defaults.new
# i am unable to update the value, it says undefined method
defaults.value_2 = Table.maximum("price")
defaults.data.data_1 = defaults.value_2 * 0.3
end
如何从默认对象访问value_2?
defaults.value_2
另外,如何从defaults对象中的数据对象访问data_1属性?
defaults.data.data_1
答案 0 :(得分:4)
您应该使用attr_accessor
:
class Defaults
attr_accessor :value_1, :value_2, :data
# ...
end
defaults = Defaults.new
defaults.value_1 = 1
# => 1
defaults.value_1
# => 1
答案 1 :(得分:0)
当您使用def
作为关键字来定义方法时,这意味着def
是保留关键字。您不能将保留关键字用作变量。
您只需要将变量名称从def
重命名为something_else
,它就可以了!您的代码将如下所示:
def updateDefaultValues
obj = Defaults.new
obj.value_2 = Table.maximum("price")
obj.data.data_1
end
修改强>
根据OP的comment&更新后的问题,他以def
为例,这里是更新后的答案:
您可能需要attr_accessor才能访问attrs:
class Defaults
attr_accessor :value_1, :value_2, :data
...
...
end
class Data
attr_accessor :data_1
...
...
end
答案 2 :(得分:-1)
在默认类
中添加value_2
方法
class Defaults
def initialize
@value_1 = "1234"
@value_2 = nil
@data = Data.new
end
def value_2
@value_2
end
end
class Data
def initialize
@data_1 = nil
end
end