Questo mi sta facendo impazzire! Ho i due modelli Lion
e Cheetah
. Entrambi ereditano da Wildcat
.Rotte, path helper e STI in Rails 4.0
class Wildcat < ActiveRecord::Base; end
class Lion < Wildcat; end
class Cheetah < Wildcat; end
STI viene utilizzato qui.
Tutti vengono gestiti tramite il controller WildcatsController
. Lì, ho un before_filer
per ottenere il type
di wildcat dal params[:type]
e tutte le altre cose per usare la classe corretta.
Nel mio routes.rb
, ho creato i seguenti itinerari:
resources :lions, controller: 'wildcats', type: 'Lion'
resources :cheetahs, controller: 'wildcats', type: 'Cheetah'
Se ora voglio utilizzare le guide di percorso, che ricevo dalle rotte (lions_path
, lion_path
, new_lion_path
, ecc), tutto è funziona come previsto, ad eccezione dei percorsi show
e new
. Ad esempio lions_path
restituisce il percorso /lions
. Il percorso new
restituisce /lions/new?type=Lion
. Lo stesso con il percorso show
. Quando provo ad inserire /lions/new
nel mio dominio radice, aggiunge correttamente il tipo param in background.
Quindi, la mia domanda è: perché Rails aggiunge il parametro type
all'url se utilizzo l'helper del percorso? E perché solo per new
e show
?
Sto eseguendo Rails 4.0.0 con Ruby 2.0 utilizzando una nuova app Rails.
Oh mio dio. Può essere così facile. Grazie per questa risposta rapida! Non volevo creare controller per ciascuno dei modelli, poiché in futuro ce ne saranno molti. Ma quello lo ha risolto! – Hiasinho
Piacere mio. Questo è il potere di OOP :). Si prega di notare che i modelli saranno dei "gatti selvatici". Se si desidera utilizzare l'opinione di Lion sull'indice, è sufficiente aggiungere un metodo di indice vuoto in LionsController. Ma penso che una visione generale potrebbe fare molti lavori nella maggior parte dei casi. –
@Hiasinho, dimentica di aggiungere 'singularize'. Questa soluzione ha una piccola dipendenza dal percorso, ma dovresti riuscire a superarla una volta cambiato il percorso. –