attr_accessor default values

I'm using rails and I want to make it so that attr_accessor :politics is set, by default, to false.

Does anyone know how to do this and is able to explain it in simple terms for me?


Rails has attr_accessor_with_default so you could write

class Like
  attr_accessor_with_default :politics,false
end

i = Like.new
i.politics #=> false

and thats all

UPDATE

attr_accessor_with_default has been deprecated in Rails 3.2.. you could do this instead with pure Ruby

class Like
  attr_writer :politics

  def politics
    @politics || false
  end
end

i = Like.new
i.politics #=> false

You could use the virtus gem:

https://github.com/solnic/virtus

From the README:

Virtus allows you to define attributes on classes, modules or class instances with optional information about types, reader/writer method visibility and coercion behavior. It supports a lot of coercions and advanced mapping of embedded objects and collections.

It specifically supports default values.


If you define your attr_accessor, by default the value is nil. You can write to it, thereby making it !nil