attr_accessor Usage in Ruby

1 minute read

Let’s assume we have a class called Person:

class Person
end

person = Person.new 
person.name #=> NoMethodError: undefined method `name' for #<Person:0x000055659b8bfb68>

If we don’t define a method called name, we will get an error like above (NoMethodError). So let’s define our method.

class Person
  def name
    @name # instance variable
  end
end

person = Person.new
person.name # => nil
person.name = "Ecmel" # => NoMethodError: undefined method `name='

We defined the name method, but we can only read it, we cannot assign any value. Let’s define writer method.

class Person
  def name # reader
    @name
  end

  def name=(str) # writer
    @name = str
  end
end

person = Person.new
person.name = "Ecmel"
person.name # => "Ecmel"

Now we can access and change the value of the instance variable (@name) using the reader and writer methods. So will we define these methods this way every time? Nope! We can use attr_reader for reader methods and attr_writer for writer methods.

class Person
  attr_reader :name
  attr_writer :name
end

We can also use attr_accessor for reading and writing methods instead of defining them separately. Moreover attr_accessor creates instance variable that called @name.

class Person
  attr_accessor :name
end

def say_hello
"Hello #{@name}"
end

person = Person.new
person.name = "Ecmel"
person.say_hello # => "Hello Ecmel"

out

Ecmel Albayrak

Ecmel Albayrak

Subscribe

* indicates required

Intuit Mailchimp