Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 673
Vasseurth Avatar asked Jul 16 '11 05:07

Vasseurth


People also ask

What is Attr_accessor?

attr_accessor is a shortcut method when you need both attr_reader and attr_writer . Since both reading and writing data are common, the idiomatic method attr_accessor is quite useful.

What is Attr_accessible?

attr_accessible is used to identify attributes that are accessible by your controller methods makes a property available for mass-assignment.. It will only allow access to the attributes that you specify, denying the rest.


2 Answers

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 
like image 139
Orlando Avatar answered Sep 20 '22 18:09

Orlando


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.

like image 34
Thilo Avatar answered Sep 22 '22 18:09

Thilo