来自Rails4 InstanceMethods的setter用于不存在的字段

时间:2015-11-04 08:38:21

标签: ruby-on-rails getter-setter ruby-on-rails-4.2 instance-methods

我正在编写一个gem rails4,我可以添加动态属性,这些属性不会在实际模型表中保留,而是会在我的第二个表中保存一个引用。

现在我有一个实例方法的before_validation,我试图将默认值设置为动态添加的属性。 我收到错误

can't write unknown attribute

代码是

self[attr_name.to_sym]=attr_type[:default_value]

请就此提出建议,如何从不存在字段的实例方法中设置setter。

我在ClassMethods中使用了instance_variable_set。

1 个答案:

答案 0 :(得分:1)

您可以在模型中使用attr_accessor方法。

class Sample << ActiveRecord::Base  

  attr_accessor :attr_name  

  #setter method
  def attr_name=(val)
    self[:attr_name] = val
  end  

  #getter method
  def attr_name
     self[:attr_name]
  end
end  

现在,您可以调用任何where instance方法,如下所示。

self[attr_name.to_sym]=attr_type[:default_value]