Se ho un modello di ActiveRecord come segueRubino di valutazione di classe, validates_inclusion_of con i dati dinamici
class Foo < ActiveRecord::Base
validates_inclusion_of :value, :in => self.allowed_types
def self.allowed_types
# some code that returns an enumerable
end
end
Questo non funziona perché il metodo allowed_types non è stato definito al momento in cui viene valutata la convalida. Tutte le soluzioni a cui posso pensare fondamentalmente ruotano attorno allo spostamento della definizione del metodo sopra la convalida in modo che sia disponibile quando necessario.
Apprezzo che questa potrebbe essere più una questione di stile di codifica di qualsiasi altra cosa (voglio tutte le mie convalide nella parte superiore del modello e i metodi in basso) ma ritengo che ci dovrebbe essere una sorta di soluzione a questo, forse comportando una valutazione pigra del carico iniziale del modello?
è quello che voglio fare anche possibile? Dovrei solo definire il metodo sopra la convalida o c'è una soluzione di convalida migliore per ottenere ciò che voglio.
@eightbitraptor ... provare ': in => Foo.allowed_types' invece di': in => self.allowed_types' ... beacause penso 'self' sarebbe riferimento all'oggetto di 'Foo' invece di' Foo' – rubyprince