2013-07-15 21 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

什麼是防止你有獨立的d數據庫爲每個環境? –

+0

我不想擁有所有東西的兩個副本,這就是以前的情況,並且所有東西都不同步 – user1738017

+0

由於SQL注入的可能性,在查詢內部使用文本替換有點讓人不悅。我懷疑@show的值不太可能被惡意用戶改變,這是一種很好的做法,使用散列表單作爲條件(如下面的兩個答案) – Slicedpan

回答

1

我想你會過得更好改變你的變量符號即

@show = :dev 
@show = :live 

那麼你的活動記錄的查詢將變成:

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

您需要將變量轉換爲實例變量。在條件下使用它。

你可以試試這個

F = Event.find(:全部:條件=> {@show.to_sym => 1})