rails que attribute attr_accessor accesor ruby-on-rails ruby attr-accessor

ruby-on-rails - que - getter setter ruby



attr_accessor valores predeterminados (7)

Esto no se hace en attr_accessor, sino en su migración.

Entonces ... podrías realizar una migración

(1) rails g migration ChangePoliticsColumnToDefaultValueFalse

(2) agregue esto en def self.up

def self.up change_column :your_table, :politics, :boolean, :default => 0 end

La conclusión es que los atributos predeterminados se establecen en las migraciones.

¡Espero que esto ayude!

Editar:

También hay algunas preguntas similares que se han respondido bien:

Como here y here

Estoy usando raíles y quiero hacerlo de modo que attr_accessor :politics esté configurado, por defecto, en falso.

¿Alguien sabe cómo hacer esto y puede explicarlo en términos simples para mí?


He estado usando este formulario en ActiveRecord:

class Song < ActiveRecord::Base def initialize(*args) super(*args) return unless self.new_record? self.play_count ||= 0 end end


Podrías usar la gema virtus:

https://github.com/solnic/virtus

Del LÉAME:

Virtus le permite definir atributos en clases, módulos o instancias de clases con información opcional sobre tipos, visibilidad del método lector / escritor y comportamiento de coerción. Es compatible con una gran cantidad de coacciones y mapeo avanzado de objetos incrustados y colecciones.

Admite específicamente valores predeterminados .


Rails tiene attr_accessor_with_default para que pueda escribir

class Like attr_accessor_with_default :politics,false end i = Like.new i.politics #=> false

y eso es todo

ACTUALIZAR

attr_accessor_with_default ha quedado obsoleto en Rails 3.2 ... puedes hacer esto en cambio con Ruby puro

class Like attr_writer :politics def politics @politics || false end end i = Like.new i.politics #=> false


Si define su attr_accessor, de manera predeterminada el valor es nil . ¡Puedes escribirle, haciéndolo así !nil


attr_accessor in rails es solo una variable virtual que no se almacena en la base de datos y solo se puede usar hasta que el registro activo no se guarde o se actualice en la aplicación. Puede definir attr_accessor en modelo como

class Contact < ActiveRecord::Base attr_accessor :virtual_variable end

y usar en forma como:

<div class="field"> <%= f.label :virtual %><br> <%= f.text_field :virtual %> </div>

y puede encontrar estos valores de variable vartual en el parametro del controlador ...


class Song < ActiveRecord::Base def initialize(*args) super(*args) return unless self.new_record? self.play_count ||= 0 end end

En mi opinión, creo que esta respuesta es buena. Aunque estamos anulando el método de inicialización pero como se llama a super en la primera línea de este método, no cambió nada al método de inicialización de clase base, sino que esta es una característica clave de la programación orientada a objetos que podemos anular, y agregar algunos más funcionalidad en el momento de la inicialización de obects. Además, el inicializador no se omitirá al leer objetos de la base de datos, ya que se llama a super en la primera línea de la función.