入力を受け取り、それをモデル属性として保存する Ruby on Rails フォームがあります。ただし、属性の 1 つは json データを保持します。複数のフィールドに入力されたデータを取得し、models 属性に単一の JSON オブジェクトとして保存できるようにしたいと考えています。これを行う方法はありますか?
それが役立つ場合は、ハッシュを作成して json に変換することもできます。基本的には、複数の入力フィールドを 1 つに結合して、そこから引き渡したいだけです。
ありがとう!
入力を受け取り、それをモデル属性として保存する Ruby on Rails フォームがあります。ただし、属性の 1 つは json データを保持します。複数のフィールドに入力されたデータを取得し、models 属性に単一の JSON オブジェクトとして保存できるようにしたいと考えています。これを行う方法はありますか?
それが役立つ場合は、ハッシュを作成して json に変換することもできます。基本的には、複数の入力フィールドを 1 つに結合して、そこから引き渡したいだけです。
ありがとう!
ここで考慮すべきことがいくつかあります。
最初の問題は、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
2.シリアライズされたハッシュを使用する
string
または列を使用text
し、モデルでシリアライズ可能として宣言します
serialize :my_data, Hash
その後、この列は単純なハッシュであり、Rails は読み取りおよび書き込み操作を実行するため、この列を使用できます。
@my_model.my_data = params[:my_fields]
to_json
実際の JSON 文字列が必要な場合は、への呼び出しが必要です。3.特殊な JSON データベース タイプを使用する
SQL を使用してデータベースにクエリを実行できるようにする必要がある場合、上記のソリューションは機能しません。そのためには、特殊なタイプを使用する必要があります。
多くの DBMS は、構造化されたデータ型を XML または JSON 型の形式で提供します。(たとえば、PostgreSQL)
複数のファイルをすべて JSON 形式のテキストとして保存し、必要に応じてフィールドを解析できます。
元:
a = JSON.parse('{"k1":"val1"}')
a['k1'] => "val1"