我有这种方法,我希望我从模型activity_id
中获取相应user_id
的最新UserActivity
,跟踪所有用户活动,然后从中获取来自另一个模型description
的activity_id的Activity
。
该函数工作正常,但有时会抛出“无法找到activity_id”的错误。可能有更好的方法来实现这个或我在这里做错了吗?
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
的模式如下:
请帮我解决这个问题。谢谢!!
Ruby版本1.8.7,Rails 2.1.2
答案 0 :(得分: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"
答案 1 :(得分: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