Ho un hook before_filter nel controller dell'applicazione della mia app principale che fa qualcosa del tipo: (Non si limita a mettere un link nel flash, c'è un messaggio, ma non è rilevante per il domanda, semplicemente accede al percorso nel metodo)Percorsi del motore in Application Controller
class ApplicationController < ActionController::Base
before_filter :set_link
def set_link
flash[:notice] = items_path
end
end
Questo funziona bene per l'applicazione, tuttavia quando vado in controllori per un motore che ho fatto ho eccezione
No route matches {:controller=>"items", :action=>"index"}
capisco che quando si è nel motore, gli helper dei percorsi sono per il motore a meno che non sia prefisso d con main_app
Così cambia il metodo nel controller applicazione per
def set_link
flash[:notice] = main_app.items_path
end
si libera l'eccezione ma davvero non voglio avere a che fare. C'è un'altra soluzione per far sì che il motore riconosca i percorsi main_app?
EDIT:
Questo accade anche se il layout applicazione chiama aiutanti di percorso. Quindi se il motore è stato progettato per essere integrato nel layout di main_app, anche questo problema verrà ritagliato.
Cosa c'è di sbagliato in 'main_app'? Oltre a ciò, perché stai introducendo una dipendenza nel tuo motore dall'app principale, in questo modo il tuo motore dipende da 'items_path' che viene definito in ** ogni ** app che lo usa. Questa non è una buona pratica, di solito dovresti usare solo "main_app.root_path', o alcune altre rotte ben note (per esempio se stai usando il" sign_in_path "). – Fabio
item_path verrebbe definito nell'app principale che è già stata creata. E voglio avere il motore montato da qualche parte ma integrato nel layout dell'app corrente. Il motore stesso non fa mai riferimento a items_path. Voglio solo che le viste generate dal motore vengano inserite nel corpo del layout dell'applicazione. Tuttavia, il layout dell'applicazione deve accedere alle route del main_app – Olives
Ciò deriva dal fatto che il motore e l'applicazione condividono lo stesso layout. In questo modo quando un utente passa da una pagina dell'app principale a una pagina del motore, non vi è alcuna differenza visibile tra il layout. – Olives