1

モデルのすべての列をループして、(1) 値を小文字に設定し、(2) トリムしようとしていますが、構文が正しくないようです。これは私がこれまでに持っているものです:

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

私は周りを検索しましたが、モデル列の値を実際に設定する例が見つからないようです。私が見つけたすべての例は、各列の値またはフィールド名の表示を扱っています。他の言語にはこれを行うための evaluate または eval 関数がありますが、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 に答える