7

मैं रेल 3.2 की डेटा स्टोर सुविधा का जिक्र कर रहा हूं, जिसमें टेक्स्टफील्ड में कुंजी-मूल्य स्टोर स्टोर करने का विकल्प है, भले ही आप MySQL जैसे रिलेशनल डेटाबेस का उपयोग कर रहे हों ... यह प्रोग्रामेटिक रूप से हेरफेर करते समय ठीक काम करता है खेत।क्या हैश कुंजी-मूल्य स्टोर वाले डेटाबेस फ़ील्ड को अद्यतन करने के लिए कोई सर्वोत्तम अभ्यास/सुसंगत तरीका है?

लेकिन इन क्षेत्रों को एक विश्वसनीय HTML फॉर्म से अपडेट करने के लिए क्या दस्तावेज है? या यह ऐसा कुछ है जिसकी सिफारिश नहीं की जाती है? यही है, बेहतर समाधान NoSQL पर जाना होगा?

उत्तर

0

अगर मैं सवाल समझ में, मैं तुम्हें सिर्फ दुकान पकड़े क्षेत्र का नाम घोषित करने की जरूरत है लगता है, और संबद्ध accessors (गुण) मॉडल में, जैसे

store :settings, accessors: [ :weight, :length, :color ] 

, जिस पर क्षेत्र के साथ काम करता बात एआर और एआरएलएल किसी अन्य की तरह, यहां तक ​​कि रूपों के साथ भी।

यहां बहुत कम जादू है। इस क्षेत्र में मूल्यों का हैश है; स्टोर घोषणा से रेल को पता चलता है कि आप उन्हें कुछ लिख सकते हैं। वजन या कुछ.color, चाहे पढ़ना या लिखना। सरल और चिकनाई। क्लासिक डीएचएच।

0

हालांकि सवाल काफी पुराना है और किसी और को यह उपयोगी लगेगा, मैं भी रूबी और रेल में बहुत नया हूं, इसलिए ऐसा करने का एक बेहतर तरीका हो सकता है।

मॉडल में:

#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 पर पास करें, उम्मीद है कि इससे मदद मिलेगी!