1

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

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,但这不是正确的语法
4

1 回答 1

0

Ruby 的访问器使用name=名为name.

您可能可以通过模型属性接口以这种方式访问​​它:

user[counter] = nil
user.save

或者,一种更通用的方法应该适用于任何暴露 , 或等效项的 Rubyattr_writer对象attr_accessor

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

您只会send在处理任意方法名称时使用该版本,就像您在这里一样。转换to_sym不是绝对必要的。

始终小心地将您接受的方法调用类型列入白名单。您不应该在没有counter经过验证的情况下成为任意用户参数。

于 2013-05-14T21:06:18.663 回答