Advertisement
Guest User

Untitled

a guest
Aug 24th, 2017
451
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.75 KB | None | 0 0
  1. create_table "accounts", :force => true do |t|
  2. t.integer "user_id"
  3. t.string "data_key"
  4. t.string "data_value"
  5. end
  6.  
  7. belongs_to :user
  8. DATA_KEYS = ['age', 'birthdate', 'hair_color', 'height' ] # etc..
  9.  
  10. has_many :accounts
  11. Account::DATA_KEYS.each do |method|
  12. # getter method
  13. define_method(method) do
  14. accounts.find_by_data_key(method).try(:data_value)
  15. end
  16.  
  17. # setter method
  18. define_method("#{method}=") do |value|
  19. data = accounts.find_or_initialize_by_data_key(method)
  20. data.data_value = value.strip
  21. data.save
  22. end
  23. end
  24.  
  25. user = User.new
  26. user.preferences = {
  27. email: "p@elh.mx",
  28. github: "heridev"
  29. }
  30.  
  31. user.save!
  32. user.reload
  33.  
  34. # Searching
  35. User.where("preferences @> hstore(:key, :value)", key: "email", value: "p@elh.mx").first
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement