I have a PaymentDetail model with attribute 'home_address_country', so i can use
@payment_detail.home_address_country //where @payment_detail is object of that model.
I want to use something like this:---
country_attribute=address_type+"_address_country" //where address type is equal to 'home'
@payment_detail."#{country_attribute}"
Means attribute name is stored in a variable. How can i do this?
EDIT
country_attribute=address_type+"_address_country"
country_list=Carmen::country_names
eval("@#{country_attribute} = #{country_list}")
A variable itself is not an object. "A variable in Ruby is just a label for a container. A variable could contain almost anything - a string, an array, a hash. A variable name may only contain lowercase letters, numbers, and underscores.
Re accessing instance/class variables (mainly from the console), for me it worked like FooClass. class_variable_set(:@@foo, 'bar') and FooClass. class_variable_get(:@@foo) , and for instances foo_class. instance_variable_set(:@foo, 'baz') and foo_class.
The short answer, if you're in the controller and you need to make the variable available to the view then use @variable . Show activity on this post. Variables without the @ symbol are called local variables, which means you can access these local variables within THAT DECLARED METHOD only. Limited to the local scope.
class . There are no "static methods" in the C# sense in Ruby because every method is defined on (or inherited into) some instance and invoked on some instance. Accordingly, they can access whatever instance variables happen to be available on the callee.
Reading AR attribute
@payment_detail.send("#{address_type}_address_country")
OR
@payment_detail.read_attribute("#{address_type}_address_country")
Writing AR attribute
@payment_detail.send("#{address_type}_address_country=", value)
OR
@payment_detail.write_attribute("#{address_type}_address_country", value)
Setting instance variable
@payment_detail.instance_variable_set("@#{address_type}_address_country", value)
Getting instance variable
@payment_detail.instance_variable_get("@#{address_type}_address_country")
Reference
Recommended way for Rails 3 is to use dictionary-like access:
attr = @payment_detail["#{address_type}_address_country"]
attr = "new value"
@payment_detail["#{address_type}_address_country"] = attr
read_attribute
and write_attribute
methods work for Rails 2 only.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With