हालांकि सवाल काफी पुराना है और किसी और को यह उपयोगी लगेगा, मैं भी रूबी और रेल में बहुत नया हूं, इसलिए ऐसा करने का एक बेहतर तरीका हो सकता है।
मॉडल में:
#user.rb
attr_accessible :preferences
store :preferences
तो प्रपत्र आंशिक में
:
attr_accessible ... , :new_pref_key, :new_pref_val
attr_accessor ... , :new_pref_key, :new_pref_val
:
#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 %>
अब प्रपत्र Ive से कुछ अतिरिक्त फ़ील्ड्स जोड़ने के लिए मॉडल में 2 attr_accessor बनाया
फिर फॉर्म
पर 2 नए फ़ील्ड जोड़े गए 210
<%= f.label :new_pref_key %>
<%= f.text_field :new_pref_key %>
<%= f.label :new_pref_val %>
<%= f.text_field :new_pref_val %>
मेरी नियंत्रक पर
मैं एक समारोह है कि नए क्षेत्र की उपस्थिति की जांच और उसके बाद नए लोगों के साथ वरीयता के पिछले मूल्यों विलय, इस तरह बनाया: किया
#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
...
है कि मैं इसे वापस और इसे update_attributes पर पास करें, उम्मीद है कि इससे मदद मिलेगी!