Domanda

In rotaie possiamo accedere colonna db attraverso attributi rotaie forniti, ma possiamo cambiare questo? per esempio ho DB con colonna nome potrei implementare qualcosa di simile.

def name
  "sir" + name
end

ho provato, ma si tradurrà in overflow dello stack. C'è un modo per raggiungere questo obiettivo.

Ancora una domanda, C'è qualche differenza tra il nome e self.name.

È stato utile?

Soluzione

def name
  "sir" + read_attribute(:name)
end

Ma evitare questa pratica. In alternativa, un getter / setter invece, noto anche come "attributo virtuale". Per maggiori informazioni leggere questa risposta: decorare un attributo in rotaie

Nel tuo caso, c'è anche un effetto collaterale strano. Ogni volta che l'attributo si accede, si aggiunge il nome. Dopo 3 chiamate, si finisce con

"sir sir sir name"

In effetti, si può fare

def name
  n = read_attribute(:name)
  if /^sir/.match(name)
    n
  else
    "sir #{n}"
  end
end

, ma, sul serio, non farlo.

Altri suggerimenti

Se siete a conoscenza di possibili complicazioni, ma ancora bisogno di fare questo, allora:

def name
  "sir" + self[:name]
end

Usa super

Rubino imperative

Ha un sacco di spiegare, ma credo che sia semplice come chiamare il metodo che è già definito

def name
  "sir #{super}"
end
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top