我想创建一个简单的方法来为用户初始化不同的计数器字段。但是,我不确定如何设置被称为变量的字段的值。
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_writer
、attr_accessor
或等价的Ruby对象:
user.send("#{counter}=", nil)
user.save
只有在处理任意方法名时才使用send
版本,就像这里一样。转换to_sym
并不是必须的。
总是小心地将你要接受的方法调用列入白名单。您不应该让counter
是未经验证的任意用户参数。