1

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

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

我四处搜索,似乎找不到实际设置模型列值的示例。我找到的所有示例都涉及显示每列的值或字段名称。在其他语言中,有一个评估或评估函数可以做到这一点,但我似乎无法在 Ruby 中找到等价的。

4

2 回答 2

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我在这里推荐语法。

于 2013-08-26T19:40:10.200 回答
1

你应该试试这段代码:

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

然后检查@response。它将使用小写分配所有值并在@response 变量中剥离。

于 2013-08-26T19:39:02.027 回答