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

时间:2013-05-14 21:00:48

标签: ruby-on-rails ruby

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

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

1 个答案:

答案 0 :(得分:0)

Ruby的访问者使用name=方法处理名为name的属性。

您可以通过模型属性界面以这种方式访问​​它:

user[counter] = nil
user.save

或者,一种更通用的方法应该适用于暴露attr_writerattr_accessor或等效的任何Ruby对象:

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

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

请务必将您正在接受的各种方法调用列入白名单。如果没有一些验证,您不应该让counter成为任意用户参数。