Using a result as a constant object?

Hello,

I am trying to understand how I can use a return from a method as a
constant name for a class. What I am trying to do is take a return I
find in a db table and use that name as a class name so that I can use
activerecord. I admit my understanding of ActiveRecord is extremely
immature so perhaps I am using it wrong.

perMatrtix = subMatrix.find[:space].to.upcase

class perMatrix < ActiveRecord::Base; end

blah, blah, blah…

So the return of the find, which is a name (turn to upper) as the name
of a class so that I can access that table within the database.

Any help is greatly appreciated! Cheers,
Phy

2008/10/19 Tim H. [email protected]:

perMatrtix = subMatrix.find[:space].to.upcase
uses class after you’ve created it? I mean, you can’t type the class name


RMagick: http://rmagick.rubyforge.org/

my_class = Class.new(ActiveRecord::Base) { set_table_name
subMatrix.find[:space].underscore.pluralize }
my_inst = my_class.new

Artem

PS:
Expression “subMatrix.find[:space]” seems strange for me. What is it
about?

Phy P. wrote:

So the return of the find, which is a name (turn to upper) as the name of a class so that I can access that table within the database.

If you’re getting the class name at run-time how would you write code
that uses class after you’ve created it? I mean, you can’t type the
class name into your program now, you don’t know what it is?

I suspect that what you really want to do is simply create a class and
assign the result to a variable. Check out Class.new.

my_class = Class.new(ActiveRecord::Base)
my_inst = my_class.new

If the ActiveRecord model already exists you can just call constantize
on the string containing the model name:

class SomeModel < ActiveRecord::Base; end

model_name = “SomeModel” # or in your case fetch this from a database
ar_model = model_name.constantize
ar.model.find(120)

Sjoerd A. wrote:

Sjoerd A. wrote:

ar.model.find(120)
Should be: ar_model.find(120)

Be aware that ‘constantize’ is a method added by ActiveSupport, no
problem if you’re using Rails, but you need to require it manually
otherwise.

Sjoerd A. wrote:

ar.model.find(120)
Should be: ar_model.find(120)

Brian,

Ah, I see now (said the blind man)! This cool! Thanks for the example,
much appreciated!

Cheers,
Phy

Sjoerd,

Thanks much for the clarification. Indeed this works well. Appreciate
the help!

Cheers,
Phy

Phy P. wrote:

I am trying to understand how I can use a return from a method as a
constant name for a class.

def get_name
“Foo”
end

n = get_name
c = Class.new(ActiveRecord::Base) # superclass
Object.const_set(n, c)

Artem,

Thank you much for the example. This truly helps. WRT you question,
its a typo and basically its a method that retrieves the various
submatrix of a giant sparse matrix. I am using a db to organize all the
data so that I can run the calculations simultaneously across several
hundred machines. The orchestration of data and control flow of
processing I am trying to do in ruby.

Again, thanks for help!
Cheers,
Phy