9

入力を受け取り、それをモデル属性として保存する Ruby on Rails フォームがあります。ただし、属性の 1 つは json データを保持します。複数のフィールドに入力されたデータを取得し、models 属性に単一の JSON オブジェクトとして保存できるようにしたいと考えています。これを行う方法はありますか?

それが役立つ場合は、ハッシュを作成して json に変換することもできます。基本的には、複数の入力フィールドを 1 つに結合して、そこから引き渡したいだけです。

ありがとう!

4

4 に答える 4

17

ここで考慮すべきことがいくつかあります。

最初の問題は、HTML フォームからデータを取得することです。フォーム入力に名前を付ける標準的な Rails の方法を使用する場合、それは非常に簡単です。

<input name="my_fields[value1]">
<input name="my_fields[value2]">
<input name="my_fields[sub1][value1]">
<input name="my_fields[sub1][value2]">

paramsそのような名前を付けると、 を介してハッシュを使用して「一括」でアクセスできますparams[:my_fields]。これにより、データを含む別のハッシュが得られます。

次に、このデータをモデルに保存する方法を選択する必要があります。いくつかのオプションがあります:

1.文字列属性を使用する

stringまたはtext列を使用して、JSON 文字列を割り当てるだけです。

@my_model.my_data = params[:my_fields].to_json
  • 長所: 非常にシンプルなソリューションです。
  • 反対: SQL クエリは事実上不可能です。Rails で処理するには、データ文字列を手動で解析する必要があります。

2.シリアライズされたハッシュを使用する

stringまたは列を使用textし、モデルでシリアライズ可能として宣言します

serialize :my_data, Hash

その後、この列は単純なハッシュであり、Rails は読み取りおよび書き込み操作を実行するため、この列を使用できます。

@my_model.my_data = params[:my_fields]
  • 長所: まだシンプルなソリューションです。JSON 文字列をいじることはありません。Rails での処理ははるかに簡単です。
  • 反対: SQL クエリは事実上不可能です。to_json実際の JSON 文字列が必要な場合は、への呼び出しが必要です。

3.特殊な JSON データベース タイプを使用する

SQL を使用してデータベースにクエリを実行できるようにする必要がある場合、上記のソリューションは機能しません。そのためには、特殊なタイプを使用する必要があります。

多くの DBMS は、構造化されたデータ型を XML または JSON 型の形式で提供します。(たとえば、PostgreSQL)

  • 長所: データベース クエリが可能です。
  • 反対: カスタムの解析とシリアル化が必要で、移行も同様です。このソリューションは、過度に設計されている可能性があります。
于 2012-12-27T11:05:11.233 に答える
2

複数のファイルをすべて JSON 形式のテキストとして保存し、必要に応じてフィールドを解析できます。

元:

a = JSON.parse('{"k1":"val1"}')
a['k1'] => "val1"
于 2012-12-26T23:42:55.403 に答える