Some inflection (?) questions

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. :wink:

Josh

Joshua M. wrote:

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. :wink:

Josh

ri Object#instance_variable_set
ri Module#const_get

On 3/26/07, Joshua M. [email protected] wrote:

class_name = ‘Country’

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

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?!

Great, thank you :slight_smile:

On Mar 26, 4:22 pm, Joshua M. [email protected] wrote:

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