Within an ActiveRecord sub-class I have seen several ways that people
access the model attributes. As I have wandered through various
blogs, my code now uses several different methods and I'm planning on
making my code consistent but I'm curious what the "best way"
is.
If I have a 'name' attribute on a model there are at least 4 different ways to get it from within the class (@name is not one of them) and at least 3 ways to set it. (i suspect there are more but these are what I am using.)
Example... class CreateAttributes < ActiveRecord::Migration def self.up create_table :attributes do |t| t.column :name, :string t.timestamps end end
def self.down drop_table :attributes end end
class Attribute < ActiveRecord::Base ########## Getters ############ def name_by_self_dot self.name or 'unlisted' end def name_by_self_bracket self[:name] or 'unlisted' end
def name_by_read_attribute read_attribute(:name) or 'unlisted' end
def name_by_name name or 'unlisted' # I assume this is just calling the name method end
########## Setters ############ def name_by_self_dot=(txt) self.name = txt end def name_by_self_bracket=(txt) self[:name] = txt end
def name_by_write_attribute=(txt) write_attribute(:name, txt) end
def name_by_name=(txt) name=txt # THIS DOES NOT WORK. I guess it creates a local variable instead of calling the setter. end end
Anyway. Which one is best? I personally like the self.attribute way as it is short and it also works the same if you have an instance variable you defined with attr_accessor. Any thoughts?
Tony