Errore di def privato su rubino 2.1
Domanda
def ora restituisce il nome del metodo.Quindi puoi scrivere
private def foo
p "foo is private"
end
.
Ma ho avuto un errore con un metodo più difficile:
2.1.1p2 :036 > private def refresh_prices
2.1.1p2 :037?> orders = order_items.includes(:book)
2.1.1p2 :038?> sum = 0
2.1.1p2 :039?> orders.each do |t|
2.1.1p2 :040 > t.price = t.book.price
2.1.1p2 :041?> sum += t.price * t.quantity
2.1.1p2 :042?> t.save
2.1.1p2 :043?> end
2.1.1p2 :044?> self.total_price = sum
2.1.1p2 :045?> save
2.1.1p2 :046?> end
SyntaxError: (irb):39: syntax error, unexpected keyword_do_block, expecting keyword_end
orders.each do |t|
^
.
Senza Privato Questo def ritorna: aggiorna_prezi.Qualcuno può spiegare perché fallisce ed è un brutto modo per usare privati def?
Soluzione
È interessante.Sembra che il blocco DO / END stia causando un errore di sintassi.
Se si utilizza il blocco in stile {}
, funziona come previsto.
private def refresh_prices
orders = order_items.includes(:book)
sum = 0
orders.each { |t|
t.price = t.book.price
sum += t.price * t.quantity
t.save
}
self.total_price = sum
save
end
# => Object
.
Credo che potrebbe essere considerato un bug.Vedrò se c'è qualche rapporto sul rubino Bug Tracker.
.
Modifica: Confermio che è un bug rubino 2.1 (vedere Bug #9308 ).È stato fissato nell'attuale versione rubino, quindi sarà disponibile nella prossima versione del bugfix.
Per ora, usa semplicemente lo stile del blocco {}
anziché fare / fine.