2012-07-25 3 views
19

Ho installato rails_admin nella mia app e voglio fare qualcosa di semplice ... Ho due modelli e la loro associazione si presenta come previsto ... Ho un modello di registrazione del seminario che appartiene a :utente.nome display rails_admin invece di id

Nel rails_admin elenca i miei utenti di iscrizione al seminario come utente # 1, # 1 Utente, ecc

Mi piacerebbe avere che essere il nome dell'utente, invece. Quello che sono riuscito a fare è questo:

config.model SeminarRegistration do 
label "Seminar Signups" 
# Found associations: 
    configure :user, :belongs_to_association 
    configure :seminar_time, :belongs_to_association # # Found columns: 
    configure :id, :integer 
    configure :user_id, :integer   # Hidden 
    configure :seminar_time_id, :integer   # Hidden 
    configure :created_at, :datetime 
    configure :updated_at, :datetime # # Sections: 

list do 
    field :user do 
    pretty_value do 
    user = User.find(bindings[:object].user_id.to_s) 
    user.first_name + " " + user.last_name 
    end 
    end 
    field :seminar_time 
end 
export do; end 
show do; end 
edit do; end 
create do; end 
update do; end 
end 

La sezione "pretty_value" mi dà il testo del nome e il cognome di mio utente ... ma ha due problemi:

1) Non è un più lungo un link. Se lascio il valore predefinito (Utente n. 1, Utente n. 2, ecc.) Fornisce un collegamento a tale utente. Come posso recuperare quel link? In che modo rails_admin definisce i suoi percorsi?

2) sembra terribilmente goffo di dover guardare in alto da id proprio lì nella mia forma ...

Scusate se questa è una questione fondamentale. Ho letto il manuale e ho cercato altre domande, ma non ha ancora "cliccato" per me. Sono anche piuttosto nuovo alle rotaie.

Grazie.


ho dovuto fare questo per farlo funzionare con il link:

ho aggiunto un metodo di supporto per il nome completo come suggerito, ma tenni a mio parere aiutanti:

module ApplicationHelper 
def full_name(user_id) 
    user = User.find(user_id) 
    user.first_name + " " + user.last_name 
end 
end 

Poi, ho cambiato la sezione "pretty_value" in questo modo:

pretty_value do 
    user_id = bindings[:object].user_id 
    full_name = bindings[:view].full_name(user_id) 
    bindings[:view].link_to "#{full_name}", bindings[:view].rails_admin.show_path('user', user_id) 
end 

In sostanza, per ottenere l'accesso a qualsiasi vista lui LPers (rotaie fatte o altro) si deve aggiungere indings [:] vista .my_tag_to_use

Per ottenere il percorso rails_admin per un utente, ad esempio, si può fare:

bindings[:view].rails_admin.show_path('user', user_id) 

risposta

20
RailsAdmin.config {|c| c.label_methods << :full_name} 

o

config.model full_name do 
    object_label_method do 
    :full_name 
    end 
end 

Quindi aggiungere un metodo full_name nel modello.

+0

Ok, questo è un modo più pulito di farlo. Ma non mi ha preso il link ... Ho modificato la mia risposta sopra per mostrare come ho funzionato. – user1535082

+0

Funziona ma in ricerche di associazione è possibile effettuare ricerche solo in base al nome o al cognome, ma non entrambi contemporaneamente. –

+0

Ho anche un collegamento con object_label_method, l'associazione deve solo essere definita –

30

Mi sono imbattuto in questa domanda su google e ho trovato un modo molto più semplice per farlo. Aggiungi un metodo title o name al tuo modello, che rails_admin userà invece di visualizzare "Utente n. 1".

class User 
    ... 
    def name 
    first_name + " " + last_name 
    end 
    ... 
end 

È possibile utilizzare al posto di titlename, ma nel tuo caso ha più senso usare nome.

+0

Risposta straordinaria e facile, grazie mille! – GuiGreg

+0

il miglior trucco di sempre! : D – AshwinKumarS

+1

assolutamente geniale. Questa dovrebbe essere la risposta accettata. – Brit200313

9

faccio questo come di 'ruolo' modello

config.model 'Role' do 
    object_label_method do 
    :custom_label_method 
    end 
end 

def custom_label_method 
    "#{role_name}" 
end 

Funziona

+1

Questo era esattamente quello di cui avevo bisogno. Aggiungerei un po 'di contesto per gli altri che dovresti aggiungere "config.model" all'inizializzatore rails_admin.rb e custom_label_method alla classe del modello. –

0

Basta aggiungere questo nel vostro modello User:

# Prety User name display for rails_amdin 
def to_s 
    return self.name 
end 
def title 
    return self.to_s 
end 

Poi riavvio del server.

È necessario aggiungere entrambi i metodi to_s e title ed è possibile modificare self.name in base a ciò che si desidera dallo schema utente.

funziona per me con Rails 4.

+0

Non avrai bisogno di 'to_s'. La definizione di 'title' o' name' sarà sufficiente, vedere la fonte [qui] (https://github.com/sferik/rails_admin/blob/12aeaf30b2148d3cbebb2f831132b4787fd47bfe/lib/rails_admin/config.rb#L50) –

0

Con qualcosa più generico nome Io di solito aggiungere un metodo sul modello. Ma la soluzione alternativa è quella di configurare l'etichetta per il campo in AR

0

È possibile utilizzare rails_admin object_label_method

See link

Per il modello d'uso, in rails_admin.rb

config.model 'User' do 
    object_label_method do 
    :custom_label_method 
    end 
end 

Nel modello di creare metodo

def custom_label_method 
    "User #{user_name}" 
end