josh
March 26, 2007, 11:41pm
1
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
josh
March 26, 2007, 11:50pm
2
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.
Josh
ri Object#instance_variable_set
ri Module#const_get
josh
March 26, 2007, 11:51pm
3
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
josh
March 27, 2007, 12:22am
4
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?!
josh
March 27, 2007, 12:31am
6
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