2011-03-04 76 views
0

我有一個模型用戶和模型message.viewed_atRails - 構建ActiveRecord查詢?

我想要做的是給一個用戶,確定他們上次何時查看消息。

給定用戶,我需要找到所有消息,然後按最頂部的最近的被查看的數據進行排序,然後取出該記錄並輸出被查看的時間戳(如果有的話)。

@user = User.find(2) 
@user.find(:first, :conditions => user.messages.viewed_at != nil) 

但這不起作用,建議?由於

+1

的:條件語法在軌棄用3. – ryeguy 2011-03-04 18:30:36

+0

謝謝,我不知道 – AnApprentice 2011-03-04 18:33:54

+0

無問題,如果你不熟悉新的語法,請看[rails guide](http://guides.rubyonrails.org/active_record_querying.html#conditions)。 – ryeguy 2011-03-04 19:12:33

回答

2

@user.messages.first(:order => "viewed_at desc")

Here are the docs.

@user.messages.where("viewed_at is not null").order("viewed_at desc").first

+0

謝謝,但這是行不通的,因爲用戶有幾條消息,其中一些消息的views_at爲零。上面的查詢是在第一條記錄可能是零。我想要避免。 – AnApprentice 2011-03-04 18:33:19

+0

看到我上面的編輯。 – jdl 2011-03-04 18:54:53

1

rails query guide是這一個很好的資源。

JDL上面的答案將起作用。另外,如果沒有最小/最大工程上日期不確定,但如果是這樣,下面的方法可能更有效:

@user.messages.where("viewed_at is not null").maximum("viewed_at")