通过循环将多个值设置为“self”对象

时间:2017-03-09 10:16:20

标签: ruby-on-rails ruby

当有不同的数据进入时(从远程服务器获取),我会覆盖一些用户数据库数据。这是一个伪代码:

def update_user_data
  new_data = fetch_new_data // this returns a Hash, e.g. {foo: 'foo', bar: 'bar'}

  self.foo = new_data[:foo]
  self.bar = new_data[:bar]
end

我试图通过某种循环使其更加智能化。所以我最终没有30多个相似的代码行。

我收到undefined method 'att=' for #<User:>错误,我理解为什么会这样,我找不到解决方案。

USER_ATTRIBUTES = [:foo, :bar]

USER_ATTRIBUTES.each do |att|
  self.att = adapt_data[att]
end

1 个答案:

答案 0 :(得分:0)

假设这是一个ActiveRecord模型,你应该这样做:

USER_ATTRIBUTES.each do |attr|
  write_attribute(attr, adapt_data[attr])
end