2014-04-28 5 views
14

में डेटाबेस के लिए सरणी को बचाने के लिए मैं इस तरह पैरामीटर है, तो:कैसे रेल

params["scholarship"] = {"name"=>"test", "state_ids"=>["1", "2", "3", "4"]} 

और जब मैं डेटाबेस क्षेत्र के लिए वस्तु बनाने के डेटाबेस के लिए नहीं बचा state_id?

कैसे प्रारूप के साथ डेटाबेस के लिए बचाने के लिए:

#<Scholarship id: 1, name: "test", state_id: "["1", "2", "3", "4"]"> 

कैसे है कि करते हैं?

धन्यवाद से पहले

उत्तर

14

ActiveRecord::Base.serialize

उदाहरण के लिए:

class User < ActiveRecord::Base 
    serialize :scholarship 
end 

user = User.create(:scholarship=> { "name" => "test", "state_ids" => ["1", "2"]}) 
User.find(user.id).scholarship# => { "name" => "test", "state_ids" => ["1", "2"] } 
+1

आप सरणियों के लिए बहुवचन रूप का उपयोग करना चाहिए: 'state_ids' – Stefan

+0

हां, धन्यवाद गलती ... टाइपो – Rubyist

+0

धन्यवाद आप @Rubyist – tardjo

2

अपने मॉडल में

serialize :state_ids 

यहाँ प्रलेखन

कहा जा रहा है ऐसा लगता है कि आप state_ids पैरामीटर भेजने और इसे बचाने के लिए कोशिश कर रहे हैं करने के लिए एक link है state_id, क्या आप यही करना चाहते हैं?

0
state_ids != state_id 

आपके पास अपनी विशेषता के लिए 2 अलग-अलग नाम हैं, इसलिए वे लाइन नहीं करते हैं। एक बार जब आप कॉलम का नाम बदल लेते हैं तो फिर serialize :state_ids का उपयोग करें।

हालांकि यदि आप राज्य_आईड्स की एक सूची संग्रहित कर रहे हैं, तो मुझे लगता है कि आपके पास एक राज्य तालिका भी है, और इसलिए has_and_belongs_to_many एसोसिएशन का उपयोग करना चाहिए।

+0

यह पहले से ही सही होता है there.You सवाल के साथ comment.Stick में प्रतिक्रिया व्यक्त की है चाहिए –

16

इसके अलावा, आप सरणी के भंडारण के लिए PostrgreSQL समर्थन उपयोग कर सकते हैं। (यदि आप निश्चित रूप से पीजी का उपयोग कर रहे हैं)। आपका प्रवास कि तरह दिखेगा:

add_column :table_name, :column_name, :string, array: true, default: [] 

लेकिन सत्यापन के बारे में भूल नहीं है।