2012-02-20 57 views
0

我有這個方法,我想我去取最近activity_id從該保留的所有用戶活動,並從獲得description軌道模型UserActivity相應user_id來自另一個模型Activity的activity_id。 該函數工作正常,但有時會引發錯誤爲「無法找到activity_id」。可能會有更好的方法來實現這個或我在這裏做錯了什麼?Rails的查詢爲選擇最近的記錄最好的辦法

def last_activity(date, user_id) 
    active_id = UserActivity.find(:all, :conditions => ["Date(updated_at) <= ? and user_id = ?", date, user_id]).last.activity_id 
    text = Activity.find(active_id).description 
end 

模型UserActivity的模式如下: enter image description here

請幫我修復此問題。謝謝 !!

的Ruby版本1.8.7,2.1.2的Rails

+0

當有要顯示沒有值這是否錯誤發生嗎?在這種情況下'last.activity_id'可能無關緊要。這裏的答案是否以任何方式幫助你? :http://stackoverflow.com/questions/4966430/model-find1-gives-activerecord-error-when-id-1-does-not-exist – sarath 2012-02-20 07:20:02

回答

0

無論是查詢沒有找到任何匹配或者一些記錄可能具有ACTIVITY_ID列null值,下面的代碼應該工作

user_activity = UserActivity.find(
    :all, :conditions => ["DATE(updated_at) <= ? AND user_id = ? AND activity_id IS NOT NULL", date, user_id], 
    :order => "updated_at DESC", :limit => 1).first 
text = Activity.find(user_activity.active_id).description rescue nil 
+0

UserActivity和Activity完全是兩個不同的模型... UserActivity跟蹤所有的用戶活動和功能,當我給一個日期和用戶ID我想要獲取該日期內的用戶的最近活動,並從該activity_id我去活動模型,以瞭解它的描述! – 2012-02-20 07:39:43

+0

針對您的評論更新了代碼。 – nkm 2012-02-20 07:52:48

2

假設你有以下型號

class User 
    has_many :user_actvities 
    has_many :activities, :through => :user_actvities, 
    :order => "user_actvities.id" 
end 

class UserActivity 
belongs_to :user 
belongs_to :activity 
end 

class Actvity 
    has_many :user_actvities 
    has_many :users, :through => :user_actvities 
end 

要獲取當前用戶的最後一項活動

current_user.activities.last 

這取決於具有最大id的UserActivity對象是最新活動的事實。

如果更新創建後UserActivity,你必須改變協會的order條款,即

has_many :activities, :through => :user_actvities, 
    :order => "user_actvities.updated_at"