2014-02-05 31 views
0

我將存儲「DONE」,「待定」數值,而「NUMBER_TYPE」,但我不知道如何使查詢子句,如何選擇在<code>status</code>列</p> <p>由where子句

scope :running, -> { where(" status <> HOW_TO_FILL ").order('created_at DESC') } 
+0

正在運行'1'和'20000'之間的數字嗎? – vee

+0

你想在'1'和'20000'之間選擇'status'的任何記錄嗎? –

+0

不是,這個號碼是'pid'。但我認爲在大多數情況下應該在1-20000之間 – newBike

回答

0

假設你可能的狀態是DONEPENDING或字符串格式的數字,那的:running狀態等同於數字而不是狀態DONEPENDING之一,那麼下面應該工作:

scope :running, -> { where "status not in ('DONE', 'PENDING')" } 

當然,如果您隨後引入了另一個非數字狀態,那麼將被視爲RUNNING,除非您更新此範圍以包含新狀態。

另一種方式來解決這個問題是使用狀態RUNNING,並簡單地選擇:

甚至更​​好,傳遞一個變量:

scope :with_status, ->(status) { where status: status.to_s.upcase } 

由於我們稱之爲.to_s.upcase的論點,你可以通過符號:done或任何情況下的字符串(done,Done,DONE),他們都會正常工作。 然後,您可以使用此範圍如下(我假設你的模式被稱爲Process):

@running_processes = Process.with_status(:running) 

然後,你可能要一個running_pid屬性的過程中添加到模型中並存儲整數值在那裏跑步。

相關問題