Some inflection (?) questions

J

Joshua Muheim

Hi all

I have the following code snipped:

@country = Country.new

Instead of hardcoding @country and Country I'd like to use the contents
of two strings:

instance_var_name = 'country'
class_name = 'Country'

How can this be achieved?

Thanks a lot for help and yes, I'm working on my Ruby skills but I'm not
quite there yet. ;-)

Josh
 
T

Timothy Hunter

Joshua said:
Hi all

I have the following code snipped:

@country = Country.new

Instead of hardcoding @country and Country I'd like to use the contents
of two strings:

instance_var_name = 'country'
class_name = 'Country'

How can this be achieved?

Thanks a lot for help and yes, I'm working on my Ruby skills but I'm not
quite there yet. ;-)

Josh
ri Object#instance_variable_set
ri Module#const_get
 
C

Chris Carter

Hi all

I have the following code snipped:

@country = Country.new

Instead of hardcoding @country and Country I'd like to use the contents
of two strings:

instance_var_name = 'country'
class_name = 'Country'

How can this be achieved?

Thanks a lot for help and yes, I'm working on my Ruby skills but I'm not
quite there yet. ;-)

Josh

you can use the instance_variable_set and const_get methods. exempli gratia:
def set_country(ivar_name,klass)
self.instance_var_set('@'+ivar_name, Object.const_get(klass).new)
end
 
J

Joshua Muheim

Thanks a lot, guys!

I got another problem now:

private
def model_obj_name
CountriesController.controller_class_name.underscore.sub(/_controller$/,
'').singularize
end

def model_obj=(obj)
self.model_obj_name
end

This gives me the following error:

private method `model_obj_name' called for
#<CountriesController:0x23e3f20>

Why that? I *can* call private methods within the methods of the same
object, can't I?!
 
P

Phrogz

Thanks a lot, guys!

I got another problem now:

private
def model_obj_name
CountriesController.controller_class_name.underscore.sub(/_controller$/,
'').singularize
end

def model_obj=(obj)
self.model_obj_name
end

This gives me the following error:

private method `model_obj_name' called for
#<CountriesController:0x23e3f20>

Why that? I *can* call private methods within the methods of the same
object, can't I?!

Yes, but you can't call them with an explicit receiver. Try simply:

def model_obj=( obj )
model_obj_name
end
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,792
Messages
2,569,639
Members
45,353
Latest member
RogerDoger

Latest Threads

Top