[Rails] ActiveRecord question

Jean-Daniel Beaubien jd at jackdan.net
Sat Jul 29 15:36:58 GMT 2006


Hi everyone,

I am having the following problem:  I have a 'User' model and a 
'User_option' model (user has_many user_options & user_options 
belongs_to user).
Now the user_option table (and model) consist mostly of a key & value 
fields, and I would like to be able to reference them like an 
associative array
instead of a collection.  Here is what I mean:

user = User.find(:first)
user.user_options[:key]

instead of having to do:
user.user_options.find {|option| option.key==key}


Someone suggested I should do it like this:

class User < ActiveRecord::Base
  has_many :user_options do
    def [](key)
      user_options.find {|opt| opt.key==key} #(search code)
    end
  end
end

The problem is the user_options array is not visible from within the 
method because the method is in effect
inside the user_option class(model).  So I am wondering how I can 
reference the 'outter' class User from within the
method 'def [](key)'.  Is this possible?  The purpose of reusing the 
user_options array is that I don't have to deal directly with the database.

Any help would be greatly appreciated...or any other suggestion on a way 
to accomplish the 'user.user_options[:key]' thing.

Thank you,

Jd





More information about the Rails mailing list