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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top