Ruby on rails 如何按几列进行排序?
我是这样写的 /models/code.rbRuby on rails 如何按几列进行排序?,ruby-on-rails,ruby-on-rails-3,activerecord,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Activerecord,Ruby On Rails 3.2,我是这样写的 /models/code.rb scope :recent, lambda { |n = 10| includes(:user).where('users.deleted_at' => nil).order("users.last_active_at DESC").limit(n) } 但是,有些记录有相同的用户。最后一个活动时间有时为 所以我试着在DESC中添加created_,如下所示 scope :recent, lambda { |n = 10| includes(
scope :recent, lambda { |n = 10| includes(:user).where('users.deleted_at' => nil).order("users.last_active_at DESC").limit(n) }
但是,有些记录有相同的用户。最后一个活动时间有时为
所以我试着在DESC中添加created_,如下所示
scope :recent, lambda { |n = 10| includes(:user).where('users.deleted_at' => nil).order("users.last_active_at DESC, created_at DESC").limit(n) }
但我得到了这个错误。我的代码怎么了?实际上,在代码表中的处创建了一个名为的列
Error (Mysql2::Error: Unknown column 'created_at' in 'order clause'
由于includes决定用户是在一个SQL查询中加入codes表,还是生成两个单独的查询(出于性能原因),因此您应确保引用的是users表及其在列中创建的_:
scope :recent, lambda { |n = 10| includes(:user).
where('users.deleted_at' => nil).
order("users.last_active_at DESC, users.created_at DESC").
limit(n) }
还可以考虑出于责任原因合并作用域,如下所示:
如果您希望在创建的是
用户
,则使用users.created_at DESC
而不是created_at DESC
。如果是codes
,则使用DESC处创建的codes.created\u。