2011-10-09 6 views
10

aggiungendo semplicemente ActiveAdmin alla mia app, ho riscontrato un problema usando show/edit/destroy action perché il mio link non punta all'ID ma al nome utente (in ordine per essere più leggibile per l'utente).Come ActiveAdmin personalizzato utilizzando find_by request anziché ID per tutte le azioni

ActiveAdmin creare correttamente il mio link come:

modificare link: http://localhost:3000/admin/users/paul/edit (where paul is the user name)

in quel caso ottengo: Couldn't find User with ID=paul

causa ovviamente Paolo non è l'id, ma il nome utente.

Come posso personalizzare ActiveAdmin per utilizzare find_by_name (params [: id]) come nella mia applicazione per tutte le azioni mostra/modifica/cancella.

In altri modelli ho un cosiddetto "SID" che è un ID salato generato e vorrei utilizzare anche il find_by_sid (params [: id]) anche per altri modelli.

Grazie mille.

Cin cin ..

+0

Partenza questa domanda correlata, la risposta accettata è anche la soluzione al vostro problema: http://stackoverflow.com/questions/7684644/activerecordreadonlyrecord- when-using-activeadmin-and-friendly-id – rdvdijk

+0

Ci proverò stasera, è efficace grazie al comando to_param. Ti tengo in contatto dopo una prova. –

risposta

12

Questo farà il lavoro in app/admin/user.rb:

ActiveAdmin.register User do 
    before_filter :only => [:show, :edit, :update, :destroy] do 
     @user = User.find_by_name(params[:id]) 
     end 
end 
1

se hai seguito questa Railscast: http://railscasts.com/episodes/63-model-name-in-url-revised e hanno percorsi personalizzati, è possibile correggere l'active_admin percorsi mettendo questo in app/admin/user.rb:

before_filter :only => [:show, :edit, :update, :destroy] do 
    @user = User.find_by_slug!(params[:id]) 
end 

E 'molto vicino a quello indicato dalla afiah, solo un po' diverso.

20

C'è un modo più pulito per fare questo:

ActiveAdmin.register User do 
controller do 
    defaults :finder => :find_by_slug 
end 
end 
Problemi correlati