我想创建一个简单的方法来为用户初始化不同的计数器字段。但是,我不确定如何设置一个被称为变量的字段的值。
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
,但这不是正确的语法答案 0 :(得分:0)
Ruby的访问者使用name=
方法处理名为name
的属性。
您可以通过模型属性界面以这种方式访问它:
user[counter] = nil
user.save
或者,一种更通用的方法应该适用于暴露attr_writer
,attr_accessor
或等效的任何Ruby对象:
user.send("#{counter}=", nil)
user.save
在处理任意方法名称时,您只使用send
版本,就像您在这里一样。转换to_sym
并非绝对必要。
请务必将您正在接受的各种方法调用列入白名单。如果没有一些验证,您不应该让counter
成为任意用户参数。