我正在尝试遍历模型的所有列,并且(1)将值设置为小写并且(2)修剪它但是我似乎无法使语法正确。这就是我到目前为止所做的:
@response.attributes.each do |attr_name, attr_value|
@response."#{attr_name}".downcase.strip!
end
我已经四处搜索,似乎无法找到实际设置模型列值的示例。我发现的所有示例都涉及显示每列的值或字段名称。在其他语言中有一个评估或eval函数来执行此操作,但我似乎无法在Ruby中找到等效函数。
答案 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变量中删除。