Rails:调用通用方法编辑各种模型字段



我想创建一个简单的方法来为用户初始化不同的计数器字段。但是,我不确定如何设置被称为变量的字段的值。

def self.initialize(user, field)
  counter = "#{field}".to_sym
  user.send(counter, nil)
  user.save        
end

我试着:

  • user.counter而不是user.send(counter),但返回一个未定义的方法错误
  • user.send(counter) = nil,但这不是正确的语法

Ruby的访问器使用name=方法来处理一个名为name的属性。

你可以通过模型属性接口访问它:

user[counter] = nil
user.save

或者,一种更通用的方法应该适用于任何公开attr_writerattr_accessor或等价的Ruby对象:

user.send("#{counter}=", nil)
user.save

只有在处理任意方法名时才使用send版本,就像这里一样。转换to_sym并不是必须的。

总是小心地将你要接受的方法调用列入白名单。您不应该让counter是未经验证的任意用户参数。

最新更新