2011-02-04 14 views
0

私は動的セットと既知のフィールドセットの両方を持つフォームを持っています。動的なフィールドをデータベースに格納する方法が必要です。データを検索する必要がないため、シリアル化されたフィールドに格納することを決めました。必要なときに格納して呼び出すだけで済みます。未知のフィールドを持つフォームを作成し、それらのフィールドをモデル内のシリアル化されたフィールドに格納する

class MyApplication < ActiveRecord::Base 
    has_one :applicant 
    belongs_to :member 

    serialize :additional_fields, Hash 

    accepts_nested_attributes_for :applicant, :additional_fields 

私は、フォームがadditional_fields_attributesなどのフィールドを返し、何とかadditional_fieldsセクションにハッシュをstorying後にモデルの外観を持っていたと考えていました。私がこれまで見ていない方法のようなものを使用する限り、またはaccepts_nested_attributes_forを取り除き、それを自分で処理する必要があるかどうかはわかりません。

誰もが考えていますか?

ありがとうございます! Ryan

答えて

1

私はあなたの提案をテストしました。

あなたは必要ありません:accepts_nested_attributes_for :additional_fields

を同じように、フォームのHTMLに追加します。

<input name="my_application[additional_fields][first]" type="text" /> 
<input name="my_application[additional_fields][second]" type="text" /> 

それがキーでハッシュが保存されます:firstsecond

あなたはあなたの中に入れることができますモデルのフィールドの配列、たとえば、あなたのユーザーモデル:

FIELDS= ["item1", "item2"] 
あなたのビューで

<% User::FIELDS.each do |field|%> 
    <input name="my_application[additional_fields][<%= field %>]" type="text" /> 
<% end %> 
+0

これらのハッシュキーをメソッドに変換する方法はありますか?たとえば、my_application.additional_fields.firstを使用します。 – lundie

+0

これは次のように答える必要があります:http://stackoverflow.com/questions/4910326/rails-editing-serialized-data-in-form – apneadiving

+0

フィールドがあることがわかっている場合はこれが機能します。私の場合、フォームは動的に生成され、各アプリケーションには異なるフィールドがあります。シリアライズされたハッシュに含まれているものから必要なメソッドを生成するために、メタプログラミングのようなものを使ってこれを処理する方法はありますか? – lundie

1

私は本当によく働いこのチュートリアルhttp://www.kalzumeus.com/2009/11/17/practical-metaprogramming-with-ruby-storing-preferences/を使用して終了。

ありがとうございました!

+0

これは本当に素敵な記事でした。私が数日間のRuby/Railsプログラミングを理解していないという理由で、メタプログラミングされた2つの属性メソッドの中で、直列化された "options"変数を "self"でスコープしなければなりませんでした。それ以外の場合、オプションはそれらのメソッドに対してローカルスコープであるように見えます。私はRails 3とRuby 1.8.7を使っています。 – sowbug

関連する問題