2010-04-10 102 views
2

一個SQL查詢我有一個Rails應用程序,我必須減去2個時間戳和運行在軌道

我用下面的SQL語句,我得到的結果網頁上顯示的結果。

select (julianday(resolutions.created_at)-julianday(tickets.created_at))*24 from tickets,resolutions 

tickets.created_at的值是18時59分02秒2010-04-05這是一個時間標記和resolutions.created_at的值是2010-04-08 8時10分33秒

現在我在哪裏放這個SQL,以便我可以在我的網頁中看到。 我試了一下在視圖頁以下,但沒有露面:

<% @sql = "select (julianday(resolutions.created_at)-julianday(tickets.created_at))*24 from tickets,resolutions" %> 
<% @t=(ActiveRecord::Base.connection.execute(@sql)) %> 

那麼,如何顯示它在我的網頁?

當我執行上述我得到打印網頁上的輸出

061.1919444389641(julianday(resolutions.created_at)-julianday(tickets.created_at))*2461.1919444389641 

僅61.1919444389641應該進行打印,但也越來越打印的查詢語句。

回答

1

您應該將您的自定義SQL放入您的模型類中,在視圖中肯定是而不是

+0

我在模型文件夾名爲.rb文件只是說: 類分辨率<的ActiveRecord :: Base的 belongs_to的:機票 結束 所以我應該在那裏添加SQL語句?以及如何讓它顯示在網頁視圖中? 對不起,我是一個初學者在軌道。我不太確定內部功能。 謝謝.. – Bharat 2010-04-10 18:53:42

1

在你的控制器

@tickets = Tickets.find(
    :all, 
    :joins => :resolution, 
    :select => '(julianday(resolutions.created_at)-julianday(tickets.created_at))*24 AS interval' 
) 

在你看來

<% @tickets.each do |ticket|%> 
    <%= ticket.interval %> 
<% end %> 

一般來說,你會把這個邏輯在你的機型之一,雖然,這樣的:

在你的門票型號

def time_to_resolve 
    resolution.created_at - created_at 
end 

將多個查詢迭代時減少查詢的次數,你這樣做:

Tickets.find(:all, :include => :resolution) 
+0

非常感謝。我會嘗試一下。 – Bharat 2010-04-11 21:17:14