2012-07-18 16 views
6

Sul tema del gasdotto patrimoniale, Rails Guide suggeriscono che Rails possibile collegare al controller file CSS specifici semplicemente chiamando:Rails3 risorsa conduttura: controller di fogli di stile specifici

stylesheet_link_tag params[:controller] 

L'estratto da Rails Guide:

Ad esempio, se si genera un ProjectController, Rails aggiungerà anche un nuovo file a app/assets/javascripts/projects.js.coffee e un altro a app/assets/stylesheets/projects.css.scss. Dovresti inserire qualsiasi JavaScript o CSS univoco per un controller all'interno dei rispettivi file di asset, poiché questi file possono essere caricati solo per questi controller con righe come <% = javascript_include_tag params [: controller]%> o <% = stylesheet_link_tag param [ : controller]%>. http://guides.rubyonrails.org/asset_pipeline.html#how-to-use-the-asset-pipeline

Quello funziona bene in fase di sviluppo in cui permettiamo Rails a ripiegare sul gasdotto risorsa. In produzione, tuttavia, viene visualizzato un errore che dice che il foglio di stile non è precompilato.

Da quello che ho letto, è necessario aggiungere tutti i beni che si desidera a manifestarsi i file come indipendenti nella matrice precompilare in questo modo:

config.assets.precompile += ['admin.js', 'admin.css', 'swfObject.js'] 

Se voglio fogli di stile specifici del controller che sono collegati come per quanto riguarda l'esempio della guida sulle rotaie di cui sopra, devo enumerare ciascuno nell'array di precompilazione?

risposta

6

La risposta breve è ... Sì.

Tuttavia, si ricorda che la pipeline delle risorse può essere utilizzata anche per abbinare i selettori. Ho implementato un'impostazione simile per un semplice cms in cui sapevo che volevo che ogni controller avesse il proprio .css e .js. La configurazione si presenta come ...

config.assets.precompile += ["*.css", "*.js") 

Non è la soluzione migliore se si è assegnare dei fogli di stile o script che non sono direttamente collegate ai controllori. Nel mio caso ogni controller aveva bisogno di file .js molto diversi.

Inoltre, se le diverse risorse possono essere raggruppate in due o tre gruppi correlati, è possibile prendere in considerazione la creazione di più manifesti e quindi elencarli in modo esplicito.

EDIT vorrei per completare questa risposta per chi sta cercando di decidere come impostare la loro precompilazione bene.

Oltre a precompilare esplicitamente ogni risorsa o manifest, è anche possibile inserire tutti i file che si desidera precomporre in una cartella nella cartella delle risorse e utilizzare la stessa corrispondenza con caratteri jolly per compilare solo tali risorse.

ad esempio

config.assets.precompile += ['*.css', 'manifests/*.js'] 

sarebbe compilare tutti i fogli CSS e js solo i file nella cartella manifesta.

Allo stesso modo è possibile passare assets.precomile un'espressione regolare. Quindi, se volessi aggiungere "pre_" a qualsiasi file che volevi precompresso, potresti usare una corrispondenza come ...

config.assets.precompile += [/^pre_\w*.(css|js)/i] 

Le possibilità sono infinite, solo che non sente il bisogno di accontentarsi di precompilazione tutte le attività, una probabilmente inutile en divorare poiché la maggior parte degli script e CSS devono essere scritti per essere utilizzato in più istanze e in collaborazione con altri script, o lancio di tutto, anche script altamente specializzati nell'applicazione. *.

Problemi correlati