2012-04-23 6 views
7

私はテキスト型の1つの列を持つテーブルを持っています。 SQLだけで高速なデータを挿入するためのものである場合がありますRails: "属性は配列であるが、文字列でした"というエラーを処理する方法は?

serialize :image_urls, Array 

配列としてシリアル化する必要があることで、小さな文字列があります。 これが事実である場合には、それは、次のエラーメッセージを表示して、データを読み取るしようとしたとき、私は、文字列に私のRailsアプリのクラッシュを挿入していますので、私は文字列

["image1.jpg", "image2.jpg"] 

として挿入を行います。

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

このエラーがスローされないようにする方法、それをキャッチしてデータを変換する方法はありますか?

文字列を配列に変換するというのは、単なる呼び出しであるため、これは簡単に行うことができます。私はどこで、どのようにそれを達成するか分からない。


私はobject_from_yamlをオーバーライドすると思いますが、この作業を行う場所がわかりません。
正しい軌道に入っていますか? fine manualから

答えて

5

シリアライズがYAMLを介して行われます[...](attr_name, class_name = Object)
をシリアル化。

したがって、列にはimage_urlsのYAMLizedバージョンが含まれていますが、'["image1.jpg", "image2.jpg"]'はYAML配列ではありません。未処理のシリアル化されたデータを取りたい場合は、

["image1.jpg", "image2.jpg"].to_yaml 
# ---------------------------^^^^^^^ 

などの文字列を生成する必要があります。

またはそれ以上の場合は、別のテーブルを使用してserializeを使用しないでください。 {::serialized_attribute_name => []}それはどんな.to_yamlせずに私のために働いたのRails 4で

+0

データが標準化するには複雑すぎる..まあ、それは右の痛みでしょう。私は本当に小さなテーブルがたくさんある必要があるからです(この例では1つのフィールドがありますが、テーブルにかなりの数があります) – baash05

+0

エラーを投げている関数をオーバーライドする方法はありますか? – baash05

+0

@dave:データベース内のデータを修正します。破損したため、購入しました。 –

2

は、ちょうどあなたがこのように試すことができimage_urls: []

0

として強いのparamsにこれを追加しました。そして、これを適切なコントローラに強力なパラメータとして追加することを忘れないでください。私が同じ問題に苦しんでいたとき、それは私を助けます。

関連する問題