Ok, slightly different question.  What is the best way to in a model to
dynamically create a method:

you use define_method to create a method but how would I do it so I can do
something like:
m = model.new
m.update_my_attrs(true)
m.update_me_attrs(false)

I have 2 methods that are almost the same except for the naming conventions
between the two which update db values which have part of the method name in
the attribute..  Which seems like a good place for define_method.


On Sun, Apr 4, 2010 at 2:38 PM, Chris Habgood <[email protected]> wrote:

> I am trying to form a string from values that get passed to the
> define_method then take the string and use it either set data in a db or do
> a .nil? on it just like any other attribute from the db.
>
>
> On Sun, Apr 4, 2010 at 2:15 PM, Conrad Taylor <[email protected]> wrote:
>
>> On Sun, Apr 4, 2010 at 11:46 AM, Chris Habgood <[email protected]>wrote:
>>
>>> Is there not a way to form a string convert it to an attribute and then
>>> do Model.(string converted to attribute)?
>>>
>>>
>> Chris, you can do the following:
>>
>>
>> class Dynamic
>>
>>   name = foo
>>   ivar = "@#{name}"  # form the string
>>
>>   define_method( "#{name}=" ) do |value|
>>      instance_variable_set( ivar, value )   # create an attribute
>>   end
>>
>> end
>>
>>
>> Also, you can do the above without using closures by doing
>>  the following:
>>
>> class Dynamic
>>
>>   name = "foo"
>>
>>   class_eval %{
>>     def #{name}
>>       @#{name}
>>     end
>>     def #{name}=(val)
>>       @#{name} = val
>>     end
>>   }
>>
>> end
>>
>> However, it really depends what you're trying to do because it's not clear
>> from the question.
>>
>> Good luck,
>>
>> -Conrad
>>
>>
>>>
>>> On Sun, Apr 4, 2010 at 12:59 PM, Chris Habgood <[email protected]>wrote:
>>>
>>>> Ok, I was also looking at testing for nil? and stuff as well not only
>>>> setting the attr.
>>>>
>>>>
>>>> On Sun, Apr 4, 2010 at 12:57 PM, Frederick Cheung <
>>>> [email protected]> wrote:
>>>>
>>>>>
>>>>>
>>>>> On Apr 4, 6:50 pm, Chris Habgood <[email protected]> wrote:
>>>>> > Not looking at the value part looking at the attribute part.  Is ex
>>>>> going to
>>>>> > be dynamic to set the attribute name correctly?
>>>>> >
>>>>> Take a look at the send method (or in the special case of active
>>>>> record you could use update_attributes (or write_attribute and []= if
>>>>> you want to operate a level lower))
>>>>>
>>>>> Fred
>>>>>
>>>>> >
>>>>> >
>>>>>
>>>>> > On Sun, Apr 4, 2010 at 12:23 PM, Conrad Taylor <[email protected]>
>>>>> wrote:
>>>>> > > On Sun, Apr 4, 2010 at 9:29 AM, Me <[email protected]> wrote:
>>>>> >
>>>>> > >> How would I take the dynamic nature of define_method and also use
>>>>> that
>>>>> > >> to set attributes:
>>>>> >
>>>>> > >> define_method ("#{ex}_method") do
>>>>> > >>  self.my_db_attribute_ex = value
>>>>> > >> end
>>>>> >
>>>>> > >> Is there a way to set the attribute part dynamically?
>>>>> >
>>>>> > > Me, you would do something like the following:
>>>>> >
>>>>> > > define_method( "#{ex}_method" ) do |value|
>>>>> > >    self.my_db_attribute_ex = value
>>>>> > > end
>>>>> >
>>>>> > > Good luck,
>>>>> >
>>>>> > > -Conrad
>>>>> >
>>>>> > >>  --
>>>>> > >> You received this message because you are subscribed to the Google
>>>>> Groups
>>>>> > >> "Ruby on Rails: Talk" group.
>>>>> > >> To post to this group, send email to
>>>>> [email protected].
>>>>> > >> To unsubscribe from this group, send email to
>>>>> > >> [email protected]<rubyonrails-talk%[email protected]><rubyonrails-talk%2Bunsubscrib
>>>>> [email protected]>
>>>>> > >> .
>>>>> > >> For more options, visit this group at
>>>>> > >>http://groups.google.com/group/rubyonrails-talk?hl=en.
>>>>> >
>>>>> > >  --
>>>>> > > You received this message because you are subscribed to the Google
>>>>> Groups
>>>>> > > "Ruby on Rails: Talk" group.
>>>>> > > To post to this group, send email to
>>>>> [email protected].
>>>>> > > To unsubscribe from this group, send email to
>>>>> > > [email protected]<rubyonrails-talk%[email protected]><rubyonrails-talk%2Bunsubscrib
>>>>> [email protected]>
>>>>> > > .
>>>>> > > For more options, visit this group at
>>>>> > >http://groups.google.com/group/rubyonrails-talk?hl=en.
>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "Ruby on Rails: Talk" group.
>>>>> To post to this group, send email to [email protected]
>>>>> .
>>>>> To unsubscribe from this group, send email to
>>>>> [email protected]<rubyonrails-talk%[email protected]>
>>>>> .
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/group/rubyonrails-talk?hl=en.
>>>>>
>>>>>
>>>>
>>>  --
>>> You received this message because you are subscribed to the Google Groups
>>> "Ruby on Rails: Talk" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected]<rubyonrails-talk%[email protected]>
>>> .
>>> For more options, visit this group at
>>> http://groups.google.com/group/rubyonrails-talk?hl=en.
>>>
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Ruby on Rails: Talk" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected]<rubyonrails-talk%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/rubyonrails-talk?hl=en.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to