【问题标题】:Rails Query for best way to select the most recent recordRails Query 选择最新记录的最佳方式
【发布时间】:2026-01-23 22:40:01
【问题描述】:

我有这个方法,我希望我从模型UserActivity 中获取最新的activity_id 对应的user_id,该模型跟踪所有用户活动,并从中获取activity_id 的description来自另一个模型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的Schema如下:

请帮我解决这个问题。谢谢!!

Ruby 版本 1.8.7,Rails 2.1.2

【问题讨论】:

  • 当没有要显示的值时,您是否会出现该错误?在这种情况下,last.activity_id 可能无关紧要。这里的答案对您有任何帮助吗? :*.com/questions/4966430/…

标签: mysql ruby-on-rails ruby ruby-on-rails-2


【解决方案1】:

假设您有以下模型

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"

【讨论】:

    【解决方案2】:

    查询未找到任何匹配项,或者某些记录可能具有活动 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
    

    【讨论】:

    • UserActivity 和 Activity 完全是两个不同的模型... UserActivity 跟踪所有用户活动,并且在我给出日期和用户 ID 时,我希望它能够获取最近的活动日期内的用户,并从那个activity_id我去活动模型来完善它的描述!
    最近更新 更多