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?
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?
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
Not looking at the value part looking at the attribute part. Is ex going to be dynamic to set the attribute name correctly?
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
Ok, I was also looking at testing for nil? and stuff as well not only setting the attr.
Is there not a way to form a string convert it to an attribute and then do Model.(string converted to attribute)?
Not looking at the value part looking at the attribute part. Is ex going to be dynamic to set the attribute name correctly?
Chris, you can dynamically set attributes by doing the following:
class Dynamic
define_method( “some_method=” ) do |value|
instance_variable_set( “@some_attribute” , some_value )
end
end
In Ruby, you can create an attribute by simply doing the following within an
instance method:
@some_attribute = some_value
For example, one can do the following:
class Dynamic
attr_accessor :foo
end
variable = Dynamic.new
variable.foo = 25
puts variable.foo
Good luck,
-Conrad
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
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.
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.
Not with Active Record attributes - they're not instance variables.
Fred
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.
Like I said, you can use send for this (which allows you to call any method on a object) and update_attributes allows you set any attributes you want given their name and a new value
Fred