2013-07-15 2 views
0

Я пытаюсь настроить две среды для моего сайта: одну на сервере разработки, одну на живую. И я хочу диктовать, какие записи из БД можно увидеть на каждом сервере. Я создал файл в моих приложениях, для разработки у него есть этот @show = "dev", и для него он имеет @show = "live". Я включил его в начало моего макета приложения, поэтому он находится на каждой странице. Тогда в моих взглядах, с каждым вызовом базы данных Я хочу поставить некоторые условия, например:Использование переменной в качестве имени столбца в rails

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

Но это не подобрать @show как переменные, просто использую его в явном виде или игнорирует его. Есть ли простой способ сделать это или это не сработает, как я ожидаю?

обновление

мне удалось заставить его работать, но я должен включить этот файл на каждом просмотре, а не только на макете приложения ... Не идеально, но это решение:

= render "includes/dev_live" 

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

что мешает вам иметь отдельный д atabases для каждой среды? –

+0

Я не хочу иметь две копии всего, вот как это было до этого, и все было не в синхронизации. – user1738017

+0

Использование подстановки текста внутри запроса ненавидят, из-за возможности SQL-инъекции. Я подозреваю, что маловероятно, что значение @show может быть изменено злонамеренным пользователем. Хорошая практика заключается в использовании хэш-формы для условий (как в двух ответах ниже). – Slicedpan

ответ

1

Я думаю, вы бы лучше изменив переменные символы т.е.

@show = :dev 
@show = :live 

тогда ваша активная запись запроса может стать:

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

необходимо преобразовать переменную в переменную экземпляра. для использования в условиях.

Вы можете попробовать это

п = Event.find (: все,: условия => {@show.to_sym => 1})

Смежные вопросы