2013-07-15 3 views
0

J'essaie de configurer deux environnements pour mon site, l'un sur un serveur de développement, l'autre sur un serveur en direct. Et je veux dicter quels enregistrements de la base de données peuvent être vus sur chaque serveur. J'ai créé un fichier dans mes includes, pour le développement il a cette @show = "dev" et pour le live il a @show = "live" J'ai inclus ceci en haut de ma mise en page d'application donc c'est sur chaque page. Puis, dans mon point de vue, chaque appel de la base de données que je veux mettre des conditions comme ceci:Utilisation d'une variable comme nom de colonne dans les rails

- f = Event.find(:all, :conditions => ["#{@show} = 1"]) 

Mais il ne capte pas @show comme étant la variable, juste utilise explicitement ou ignore. Existe-t-il un moyen simple de le faire ou est-ce que cela ne fonctionnera pas comme je le souhaite?

mise à jour

J'ai réussi à le faire fonctionner, mais je dois inclure le fichier sur chaque vue individuel plutôt que sur la mise en application ... Pas idéal, mais il est une solution:

= render "includes/dev_live" 

- f = Event.find(:all, :conditions => {@show => 1}) 
+0

ce qui vous empêche d'avoir d séparé bases de données pour chaque environnement? –

+0

Je ne veux pas avoir deux copies de tout, c'était comme ça avant et tout était désynchronisé – user1738017

+0

L'utilisation de la substitution de texte dans une requête est un peu mal vu, en raison de la possibilité d'injection SQL. Je soupçonne qu'il est peu probable que la valeur de @show puisse être modifiée par un utilisateur malveillant, il est recommandé d'utiliser la forme de hachage pour les conditions (comme dans les deux réponses ci-dessous) – Slicedpan

Répondre

1

Je pense que vous seriez mieux changer vos variables symboles à savoir

@show = :dev 
@show = :live 

alors votre requête d'enregistrement actif pourrait devenir:

f = Event.find(:all, :conditions => {@show => 1}) 
0

vous devez convertir une Variable en variable d'instance. pour l'utiliser dans des conditions.

Vous pouvez essayer

f = Event.find (: all,: conditions => {@show.to_sym => 1})

Questions connexes