sebbene la domanda sia piuttosto vecchia, qualcun altro potrebbe trovarlo utile, anche se è piuttosto nuovo in rubino e rotaie, quindi potrebbe esserci un modo migliore per farlo.
Nel modello:
#user.rb
attr_accessible :preferences
store :preferences
poi in forma parziale:
#views/users/_form.rb
<% @user.preferences.each do |k, v| %>
<% form.fields_for :preferences, @user.preferences[k] do |p| %>
<div class="field">
<%= p.label k %>
<br/>
<%= p.text_field k, :value => v %>
</div>
<% end %>
<% end %>
ora per aggiungere alcuni campi aggiuntivi dalla forma Ive ha creato 2 attr_accessor nel modello:
attr_accessible ... , :new_pref_key, :new_pref_val
attr_accessor ... , :new_pref_key, :new_pref_val
quindi aggiunto i 2 nuovi campi nel modulo
<%= f.label :new_pref_key %>
<%= f.text_field :new_pref_key %>
<%= f.label :new_pref_val %>
<%= f.text_field :new_pref_val %>
sul mio controller ho fatto una funzione che controlla la presenza di nuovi campi e poi unire i valori precedenti delle preferenze con quelle nuove, come questo:
#users_controller.rb
...
new_key = params[:user][:preferences][:new_pref_key]
new_val = params[:user][:preferences][:new_pref_val]
new_preference = {
new_key => new_val
}
current_params = params[:user][:preferences].merge! new_preference
...
fatto che io ritorni e passalo agli update_attributes, spero che sia d'aiuto!