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

···

--
Posted via http://www.ruby-forum.com/.

Joshua Muheim wrote:

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

ri Object#instance_variable_set
ri Module#const_get

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

···

On 3/26/07, Joshua Muheim <forum@josh.ch> wrote:

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

--
Posted via http://www.ruby-forum.com/\.

--
Chris Carter
concentrationstudios.com
brynmawrcs.com

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

···

--
Posted via http://www.ruby-forum.com/.

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

def model_obj=( obj )
  model_obj_name
end

···

On Mar 26, 4:22 pm, Joshua Muheim <f...@josh.ch> wrote:

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:

···

--
Posted via http://www.ruby-forum.com/.