Domanda valori predefiniti attr_accessor


Sto usando le rotaie e voglio farlo in modo che attr_accessor :politics è impostato, per impostazione predefinita, su false.

Qualcuno sa come farlo ed è in grado di spiegarlo in termini semplici per me?


44
2017-07-16 05:07


origine


risposte:


Rails ha attr_accessor_with_default quindi potresti scrivere

class Like
  attr_accessor_with_default :politics,false
end

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

e questo è tutto

AGGIORNARE

attr_accessor_with_default è stato deprecato in Rails 3.2 .. è possibile farlo invece con puro Ruby

class Like
  attr_writer :politics

  def politics
    @politics || false
  end
end

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

107
2018-01-08 04:09



Se definisci il tuo attr_accessor, per impostazione predefinita il valore è nil. Puoi scrivere su di esso, così facendo !nil 


0
2018-04-18 02:21



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

Secondo me, penso che questa risposta sia buona. Anche se stiamo sovrascrivendo il metodo di inizializzazione ma dato che super è chiamato sulla prima riga di questo metodo, non ha cambiato nulla nel metodo di inizializzazione della classe base, piuttosto questa è la caratteristica chiave della programmazione orientata agli oggetti che possiamo sovrascriverla e aggiungere alcuni più funzionalità al momento dell'inizializzazione degli obetti. Inoltre, l'inizializzatore non verrà saltato durante la lettura degli oggetti dal database, poiché super viene chiamato alla prima riga della funzione.


0
2018-01-15 06:37



Potresti usare la gemma del virtus:

https://github.com/solnic/virtus

Dal README:

Virtus consente di definire attributi su classi, moduli o istanze di classe con informazioni opzionali su tipi, visibilità del metodo lettore / scrittore e comportamento di coercizione. Supporta molte coercizioni e una mappatura avanzata di oggetti e collezioni incorporati.

Supporta specificamente valori standard.


0
2017-12-27 19:58



Questo non è fatto in attr_accessor, piuttosto, nella tua migrazione.

Quindi ... potresti eseguire una migrazione

(1) rails g migration ChangePoliticsColumnToDefaultValueFalse

(2) aggiungi questo in def self.up

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

La linea di fondo è che gli attributi di default sono impostati nelle migrazioni.

Spero che questo ti aiuti!

Modificare:

Ci sono anche domande simili a cui è stata data una risposta:

Piace Qui e Qui


-1
2017-07-16 05:16



Ho usato questo modulo in ActiveRecord:

class Song < ActiveRecord::Base

    def initialize(*args)
      super(*args)
      return unless self.new_record?
      self.play_count ||= 0
    end
end

-2
2018-05-23 19:55



attr_accessor in rails sono solo variabili virtuali che non sono archiviate nel database e possono essere utilizzate solo fino a quando il record attivo non viene salvato o aggiornato nell'applicazione. È possibile definire attr_accessor in modelli come

class Contact < ActiveRecord::Base
attr_accessor :virtual_variable
end

e utilizzare in forma come: -

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

e puoi trovare questi valori della variabile vartuale nel parametro del controller ...


-3
2018-03-20 14:04