[Ruby-on-rails] हैश को डेटाबेस में सहेजने के लिए रेल का क्रमबद्ध करें


Answers

अपडेट:

सटीक कार्यान्वयन आपके डेटाबेस पर निर्भर करेगा, लेकिन PostgreSQL में अब jsonb और jsonb कॉलम हैं जो आपके हैश / ऑब्जेक्ट डेटा को मूल रूप से स्टोर कर सकते हैं और आपको jsonb विरुद्ध ActiveRecord के साथ क्वेरी करने की अनुमति देते हैं!

अपना माइग्रेशन बदलें और आप कर चुके हैं।

class Migration0001
  def change
    add_column :users, :location_data, :json, default: {}
  end
end

मूल:

अधिक जानकारी के लिए: रेल दस्तावेज़ और apidock

सुनिश्चित करें कि आपका कॉलम है :text और नहीं :string

माइग्रेशन:

$ rails g migration add_location_data_to_users location_data:text

बनाना चाहिए:

class Migration0001
  def change
    add_column :users, :location_data, :text
  end
end

आपकी कक्षा की तरह दिखेगा:

class User < ActiveRecord::Base
  serialize :location_data
end

उपलब्ध कार्य:

b = User.new
b.location_data = [1,2,{foot: 3, bart: "noodles"}]
b.save

अधिक बढ़िया ?!

postgresql hstore का उपयोग करें

class AddHstore < ActiveRecord::Migration  
  def up
    enable_extension :hstore
  end

  def down
    disable_extension :hstore
  end
end 

class Migration0001
  def change
    add_column :users, :location_data, :hstore
  end
end

Hstore के साथ आप धारावाहिक क्षेत्र पर विशेषताओं को सेट कर सकते हैं

class User < ActiveRecord::Base  
  # setup hstore
  store_accessor :location_data, :city, :state
end
Question

मैं अपने रेल ऐप में कई प्रयासों के लिए हैश मैपिंग आईडी को सहेजने का प्रयास कर रहा हूं। इस नए कॉलम को समायोजित करने के लिए डेटाबेस में मेरा माइग्रेशन:

class AddMultiWrongToUser < ActiveRecord::Migration
  def self.up
    add_column :users, :multi_wrong, :string
  end

  def self.down
    remove_column :users, :multi_wrong
  end
end

मेरे मॉडल में मेरे पास है:

class User < ActiveRecord::Base 
 serialize :multi_wrong, Hash
end

लेकिन जब मैं रेलवे कंसोल का उपयोग करके इसका परीक्षण करने के लिए उपयोग करता हूं:

user = User.create()
user.multi_wrong = {"test"=>"123"}
user.save

आउटपुट झूठा है। क्या गलत हो रहा है?