通过将其作为参数传递来定义要处理的属性?

时间:2014-06-20 23:09:09

标签: ruby-on-rails ruby

我的类有两个相同类型的属性。

该类目前有两个方法做同样的事情,每个属性一个。

是否可以通过将属性名称作为参数传递来将这两种方法减少到只有一种?

这是我尝试过的(但是给了我" NoMethodError:未定义的方法`attribute_name' for ..."):

def my_method(attribute_name)
  self.attribute_name = 2
  self.save
end

2 个答案:

答案 0 :(得分:1)

别名是一个更好的选择,而不是像你一样尝试分配属性值。请查看alias_attributealias_method

的用法

就错误而言,您不能将属性用作您使用过的变量。您可以改为使用send,如下所示:

def my_method(attribute_name)
  send(:"#{attribute_name}=", 2)
  save
end

答案 1 :(得分:1)

要保存而不进行验证:

  update_attribute(attribute_name.to_sym, 2)

要通过验证保存:

  update_attributes({ attribute_name.to_sym => 2 })

分配而不保存:

  assign_attributes({ attribute_name.to_sym => 2 })

我认为最后一种方法是你在寻找什么

def my_method(attribute_name)
  self.assign_attributes({ attribute_name.to_sym => 2 })
  self.save
end