2011-10-29 12 views
6

Attualmente ho un'applicazione Rails 3.0.10 e ho creato due modelli con associazioni semplici: has_many e belongs_to.Rails 3 - ActiveAdmin - Visualizzazione dell'oggetto ActiveRecord invece del testo

Dopo aver installato il plugin ActiveAdmin e creato i file di risorse Ruby corrispondenti, ho notato alcuni comportamenti strani.

Di seguito, è possibile vedere che "File lavoro" appartiene a "Client Ernet". Le associazioni funzionano correttamente, tuttavia, il nome visualizzato viene visualizzato come l'oggetto ActiveRecord effettivo anziché il nome del client.

enter image description here

Questa è la vista spettacolo quando nella sezione "File di lavoro":

enter image description here

Ma, se vado a vedere il cliente attuale, appare il testo corretto:

enter image description here

Ci deve essere qualcosa che non va nel "File lavoro" resou Ciò sta causando questo, ma non riesco a capire cosa potrebbe essere. Dopo googling ho trovato questo: http://groups.google.com/group/activeadmin/browse_thread/thread/2a261e070efa7bae

All'interno del file JobFile.register ho specificato il nome visualizzato con questo:

filter :ernet_client, :display_name_methods => :display_name 

questo non ha funzionato, però, e ho pedalato attraverso tutti gli altri nomi disponibili inutilmente.

Ho cercato le dipendenze di ActiveAdmin e sass-rail sembra essere l'unico, ma questo è se si utilizza 3.1 e sto usando Rails 3.0.10.

E, infine, per essere sicuri che le mie associazioni sono state effettivamente lavorando, ho aperto la console Rails e ha creato un file di lavoro:

job = JobFile.new 
=> #<JobFile hash returned> 
job.ernet_client_id = 2 
=> 2 
job.ernet_client.client_name 
=> Target 

Tutto sembra funzionare come dovrebbe.

Qualcuno ha qualche idea su come risolvere questo?

risposta

10

Hai provato a definire un metodo to_s nel modello ErnetClient?

def to_s 
    display_name 
end 

Sembra che questo è il metodo che viene chiamato automaticamente, come se l'avete fatto chiamare to_s su uno di questi oggetti nella console si otterrebbe un risultato simile.

+0

Ok, ho definito un metodo to_s nel modello ErnetClient.rb come suggerito. Finisce per causare un errore nel file active_admin/resource/index.html.arb: variabile locale non definita o metodo 'display_name 'per # . Tuttavia, ho anche inserito il simbolo ": display_name" nel metodo.Ciò ha causato il rendering dei filtri a discesa ": display_name" per tutte le selezioni a discesa. – PhillipKregg

+0

Bene, non hai un metodo 'display_name' per questo. Il metodo 'to_s' dovrebbe restituire qualsiasi stringa che vuoi mostrare per l'oggetto' ErnetClient'. –

+0

Da quello che sto vedendo, display_name è un metodo già esistente nel plugin ActiveAdmin sotto viewhelpers: https://github.com/gregbell/active_admin/blob/master/lib/active_admin/view_helpers/display_helper.rb. Potrebbe esserci qualcosa che impedisce alla mia app di vederlo? – PhillipKregg

3

È possibile trovare la spiegazione qui Filter select show object instead of object name.

# Active Admin makes educated guesses when displaying objects, 
this is the list of methods it tries calling in order 
     setting :display_name_methods, [ :display_name, 
              :full_name, 
              :name, 
              :username, 
              :login, 
              :title, 
              :email, 
              :to_s ] 

Si può definire un display_name, full_name, o ... (vedere l'elenco di cui sopra) ... il metodo nel modello. ActiveAdmin cerca uno di quelli.

Problemi correlati