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
--~--~---------~--~----~------------~-------~--~----~
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