# Some inflection (?) questions

**URL:** <https://www.ruby-forum.com/t/some-inflection-questions/90236>\
**Category:** Ruby\
**Created:** [March 26, 2007, 11:41pm UTC](https://www.ruby-forum.com/t/some-inflection-questions/90236 "2007-03-26T23:41:18Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![josh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/45deac/32.png) [@josh](https://www.ruby-forum.com/u/josh)\
**Post date:** [March 26, 2007, 11:41pm UTC](https://www.ruby-forum.com/t/some-inflection-questions/90236/1 "2007-03-26T23:41:18Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![josh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/45deac/32.png) [@josh](https://www.ruby-forum.com/u/josh)\
**Post date:** [March 26, 2007, 11:50pm UTC](https://www.ruby-forum.com/t/some-inflection-questions/90236/2 "2007-03-26T23:50:12Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![josh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/45deac/32.png) [@josh](https://www.ruby-forum.com/u/josh)\
**Post date:** [March 26, 2007, 11:51pm UTC](https://www.ruby-forum.com/t/some-inflection-questions/90236/3 "2007-03-26T23:51:12Z")

</div>

On 3/26/07, Joshua M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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

---

<div class="post-metadata">

**Author:** ![josh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/45deac/32.png) [@josh](https://www.ruby-forum.com/u/josh)\
**Post date:** [March 27, 2007, 12:22am UTC](https://www.ruby-forum.com/t/some-inflection-questions/90236/4 "2007-03-27T00:22:08Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![josh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/45deac/32.png) [@josh](https://www.ruby-forum.com/u/josh)\
**Post date:** [March 27, 2007, 12:39am UTC](https://www.ruby-forum.com/t/some-inflection-questions/90236/5 "2007-03-27T00:39:50Z")

</div>

Great, thank you 🙂

---

<div class="post-metadata">

**Author:** ![josh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/45deac/32.png) [@josh](https://www.ruby-forum.com/u/josh)\
**Post date:** [March 27, 2007, 12:31am UTC](https://www.ruby-forum.com/t/some-inflection-questions/90236/6 "2007-03-27T00:31:19Z")

</div>

On Mar 26, 4:22 pm, Joshua M. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) 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
