Ispezione del modello in un'applicazione Rails

1

Sto imparando alcuni Ruby on Rails e sono un principiante. La maggior parte del mio background è in ASP.net MVC sul back-end.

Mentre gioco con un progetto di scaffold di base, mi domando su questo caso: si entra in un progetto Rails stabilito e si vuole conoscere il modello. Sulla base di ciò che ho visto finora (ancora una volta, semplice scaffold), le proprietà per una determinata classe non vengono rivelate immediatamente. Non vedo accessorie di proprietà sulle classi del modello.

Capisco che ciò sia dovuto alla natura dinamica di Ruby e tali cose non sono necessarie o forse addirittura desiderabili. Convenzione sul codice, ho capito. (Ho familiarità con i concetti dinamici, principalmente tramite JS.)

Ma se mi trovo da qualche parte in una vista e voglio sapere rapidamente se l'oggetto Person (es.) ha una proprietà MiddleName, come lo trovo? Non devo entrare nelle migrazioni, vero?

    
posta Matt Sherman 05.01.2011 - 03:45
fonte

2 risposte

1

ActiveRecord fornisce il metodo attributes, che restituisce un hash di nomi di attributi mappati ai loro valori per l'oggetto ricevente. Quindi puoi fare qualcosa come (esempio console session):

> u = User.first
> u.attributes
=> {"first_name"=>"Joe", "last_name"=>"Bloggs","email"=>"[email protected]"}
> u.attributes.keys
=> ["first_name", "last_name", "email"]
> u.attributes.keys.include?("middle_name")
=> false

Link alla documentazione

    
risposta data 05.01.2011 - 14:59
fonte
0

Puoi trovare gli attributi di un modello in schema.rb se desideri l'elenco completo degli attributi su un modello, compresi gli ID di associazione. In alternativa, ci sono molti modi per farlo nella console, come pp Model.instance o puts @instance.ai , che mostrano la stessa cosa. Tuttavia, questo non ti darà i metodi disponibili, dal momento che rails fa un sacco di lavoro per estrapolare i metodi dagli attributi (ad esempio, impostando un has_one :user non si limita a includere @instance.user ).

Se vuoi esaminare i tuoi metodi disponibili su un oggetto o modello, puoi utilizzare @instance.public_methods . Puoi sottrarre anche i metodi ereditati, ad es. @instance.public_methods - Object.public_methods o @instance.public_methods - ActiveRecord::Base.public_methods . Puoi anche usare .instance_methods sulla classe, per esempio.

Infine, ti consigliamo di consultare la annotazione della gemma , che aggiunge commenti ai tuoi modelli. Devi eseguirlo di nuovo dopo le migrazioni, ma potrebbe essere quello che stai cercando

    
risposta data 09.06.2014 - 17:27
fonte

Leggi altre domande sui tag