2010-05-19 5 views
1

Mon application a des pages de deux types de base: les formulaires et les tableaux. En tant que tel, j'ai deux fichiers CSS différents, forms.css et tables.css.Charger différents CSS dans la mise en page de l'application en fonction du type de page (Ruby on Rails)

Dans mon fichier de mise en page d'application (application.html.erb), je voudrais charger différentes feuilles de style en fonction d'un type d'indicateur défini dans une vue donnée.

Par exemple, <%= defined?(@tables) : stylesheet_link_tag 'tables' ? stylesheet_link_tag 'forms' %>.

L'extrait ci-dessus ne fonctionne pas réellement, mais c'est ce que j'essaie d'accomplir?

Des idées?

Répondre

2

Vous devez déplacer ceci vers un before_filter dans votre contrôleur. Gardez la vue légère.

De l'avis:

<%=stylesheet_link_tag @foo %> 

before_filter dans le contrôleur:

before_filter :get_css_file 

def get_css_file 
    @foo = defined?(@tables) ? 'tables' : 'forms' 
end 

Je suppose que vous mettre @Tables dans votre contrôleur, vous pourriez avoir à ajuster votre logique, mais vous avez l'idée . En fait, vous savez déjà s'il s'agit d'un contrôleur de page ou de formulaire, probablement, vous devez donc simplement définir @foo directement: @foo = 'tables' etc.

+0

Comment avez-vous fait cela? – peehskcalba

+0

Édité ma réponse. – ghoppe

1

Votre syntaxe d'opérateur ternaire est incorrecte, si c'est ce que vous essayez de faire . Je pense que vous voulez dire ceci:

<%= defined?(@tables) ? stylesheet_link_tag 'tables' : stylesheet_link_tag 'forms' %> 

Le point d'interrogation (?) Et le signe deux-points (:) ont changé de place.

2

Je viens d'essayer une chose similaire et ça marche pour moi. Votre code n'est pas tout à fait correct, peut-être vous avez juste besoin de le changer en

<%= stylesheet_link_tag(defined?(@tables) ? 'tables' : 'forms') %> 
Questions connexes