使用Ruby循环遍历模型中的列

时间:2013-08-26 19:36:35

标签: ruby-on-rails ruby

我正在尝试遍历模型的所有列,并且(1)将值设置为小写并且(2)修剪它但是我似乎无法使语法正确。这就是我到目前为止所做的:

@response.attributes.each do |attr_name, attr_value|
   @response."#{attr_name}".downcase.strip!
end

我已经四处搜索,似乎无法找到实际设置模型列值的示例。我发现的所有示例都涉及显示每列的值或字段名称。在其他语言中有一个评估或eval函数来执行此操作,但我似乎无法在Ruby中找到等效函数。

2 个答案:

答案 0 :(得分:2)

您可以使用write_attribute方法按名称

更改ActiveRecord属性
@response.attributes.each do |attr_name, attr_value|
  @response.write_attribute( attr_name, attr_value.downcase.strip )
end

ActiveRecord框架之外,通常使用send方法按名称调用一堆访问器。这也适用于此:

@response.attributes.each do |attr_name, attr_value|
  setter = "#{attr_name}="
  @response.send( setter, attr_value.downcase.strip )
end

但是,ActiveRecord的作者已经预见到了这种需求,write_attribute语法将是我的推荐。

答案 1 :(得分:1)

您应该尝试以下代码:

@response.attributes.each do |attr_name, attr_value|
  @response[attr_name.to_sym] = attr_value.to_s.downcase.strip
end

然后检查@response。它将使用downcase分配所有值并在@response变量中删除。