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

Ruby on rails 通过循环将多个值设置为“self”对象,ruby-on-rails,ruby,Ruby On Rails,Ruby,当一个不同的数据(从远程服务器获取)进来时,我正在覆盖某个关注点的一些用户DB数据。下面是一个伪代码: 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多行类似的代码了

当一个不同的数据(从远程服务器获取)进来时,我正在覆盖某个关注点的一些用户DB数据。下面是一个伪代码:

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多行类似的代码了

对于#错误,我得到了一个
未定义的方法“att=”,我理解为什么会发生这种情况,我就是找不到解决方案

USER_ATTRIBUTES = [:foo, :bar]

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

假设这是一个ActiveRecord模型,您应该执行以下操作:

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

出于某种原因,我得到了
ActiveModel::MissingAttributeError:无法写入未知属性“foo”
。和数组值是符号有关吗?嗯,那个模型上有列
foo
?有。我认为问题是因为它是别名属性。存储在DB中的其他字段使用相同的名称也可以正常工作,但当它是与此字段相同的别名时就不行了。这是在模型中:
alias_attribute attr,:“encr#{attr}”
其中
attr
将是
foo
@abpetkov:啊,是的,这一定是它。我仍然接受,因为这是另一个问题,而且您的解决方案有效。