4

Rails 3 アプリケーションでハッシュを保存する際に問題があります。コンソールを使用している場合は問題なく保存できます。フォームからハッシュを送信すると機能しません。

This SO question はそれに対処しますが、解決策は私にとってはうまくいきません。さらに、私が使用する場合:

 serialize :bulk_action, Hash

エラーが発生します:

 Attribute was supposed to be a Hash, but was a String

フォームを介して保存すると、ハッシュは次のようになります。

 "{\"location\"=>{\"commands\"=>{\"custom_command_one\"=>\"true\", \"custom_command_two\"=>\"true\"}}}"

一方、コンソールを介して:

{"location"=>{"commands"=>{"custom_command_one"=>"true", "custom_command_two"=>"true"}}}

私のデータベース フィールドはテキスト フィールドです。フォームを介してハッシュを保存する最良の方法は何ですか?

- 編集 -

名前に文字列ではなくシンボルを使用すると、問題を回避できることがわかりましたが、ハッシュではなく1つの長い文字列を出力します。

4

4 に答える 4

0

リンクからhttp://api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/Serialization/ClassMethods.html#method-i-serialize

serialize(attr_name, class_name = Object)
[...] The serialization is done through YAML.

したがって、列には、bulk_action の YAML 化されたバージョンが含まれている必要がありますが、'

 "{\"location\"=>{\"commands\"=>{\"custom_command_one\"=>\"true\", \"custom_command_two\"=>\"true\"}}}"

YAML ハッシュではありません。生のシリアル化されたデータをいじくり回したい場合は、次のようなものを使用する必要があります

 "{\"location\"=>{\"commands\"=>{\"custom_command_one\"=>\"true\", \"custom_command_two\"=>\"true\"}}}".to_yaml
于 2013-11-30T11:11:00.847 に答える
0
于 2014-08-28T14:27:47.097 に答える