ActiveRecord::Store typecasting & default values

46 views
Skip to first unread message

Gaurish Sharma

unread,
Apr 10, 2015, 12:38:21 AM4/10/15
to rubyonra...@googlegroups.com
ActiveRecord::Store is like a simple key/value store that you use for dynamic attributes in a relational databases, for examples storing settings without creating new cols.But to make it really useful, you need some sort of typecasting which from docs should be done like this:



class Song < ActiveRecord::Base
  # Uses a stored integer to hold the volume adjustment of the song
  store :settings, accessors: [:volume_adjustment]

  def volume_adjustment=(decibels)
    super(decibels.to_i)
  end

  def volume_adjustment
    super.to_i
  end
end


As you can see the idea that you should be overwriting the default accessors to type casting twice(once for getter & once for setter). so if you have 10attributes, you have to define 20methods in your model(verbose & not DRY). Further, this doesn't handle default values. Hence, I propose following new syntax

store(:settings) do
  boolean :allow_custom_url, default: false
  integer :volume
  integer :update_interval, default: 60
  string :blurb
  string :body_background, default: "light"
  string :contrast, default: "red"
end


Feedback welcome

Bráulio Bhavamitra

unread,
Apr 10, 2015, 8:15:15 AM4/10/15
to rubyonrails-core
Hello Gaurish,

We use a simple and old module for this. It supports default values. First you do:
acts_as_having_settings field: 'settings'

And then multiple times in multiple places (including monkey patches from other places):
settings_items :some_values, type: Array, default: [1,2,3]
settings_items :volume_on, type: :boolean, default: false


cheers,
bráulio



--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-co...@googlegroups.com.
To post to this group, send email to rubyonra...@googlegroups.com.
Visit this group at http://groups.google.com/group/rubyonrails-core.
For more options, visit https://groups.google.com/d/optout.



--
"Lute pela sua ideologia. Seja um com sua ideologia. Viva pela sua ideologia. Morra por sua ideologia" P.R. Sarkar

EITA - Educação, Informação e Tecnologias para Autogestão
http://cirandas.net/brauliobo
http://eita.org.br

"Paramapurusha é meu pai e Parama Prakriti é minha mãe. O universo é meu lar e todos nós somos cidadãos deste cosmo. Este universo é a imaginação da Mente Macrocósmica, e todas as entidades estão sendo criadas, preservadas e destruídas nas fases de extroversão e introversão do fluxo imaginativo cósmico. No âmbito pessoal, quando uma pessoa imagina algo em sua mente, naquele momento, essa pessoa é a única proprietária daquilo que ela imagina, e ninguém mais. Quando um ser humano criado mentalmente caminha por um milharal também imaginado, a pessoa imaginada não é a propriedade desse milharal, pois ele pertence ao indivíduo que o está imaginando. Este universo foi criado na imaginação de Brahma, a Entidade Suprema, por isso a propriedade deste universo é de Brahma, e não dos microcosmos que também foram criados pela imaginação de Brahma. Nenhuma propriedade deste mundo, mutável ou imutável, pertence a um indivíduo em particular; tudo é o patrimônio comum de todos."
Restante do texto em http://cirandas.net/brauliobo/blog/a-problematica-de-hoje-em-dia
Reply all
Reply to author
Forward
0 new messages