ruby on rails从其对象访问自定义类属性

时间:2015-04-15 11:20:55

标签: ruby-on-rails ruby ruby-on-rails-4

我的应用程序控制器中有一个自定义类。如下所示:

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

3 个答案:

答案 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