4

我有一个 Rails 模型,假设用户与 Post 有很多关系。Post 包含一个名为 position 的属性,用于存储位置(acts_as_list gem)。位置存储用户帖子列表中的位置(顺序不是由于创建/修改帖子)。此外,帖子存储了时间戳(t.timestamps在迁移中)

所以我在 User.rb 中定义了以下内容:

has_many :post, :order => "position", :dependent => :destroy

但是,当我这样做时User.first.posts,帖子不是按位置排序的。我已经检查过,正在查询的 sql 包含以下内容:

ORDER BY post.created_at DESC, position

所以 created_at 仍在使用中。

如何按位置排序而不使用 created_at 属性?

提前致谢!

解决方案 我在 Post 中定义了一个默认范围,该范围正在创建不希望的订单。

问题解决了

4

1 回答 1

4

您可以使用默认范围

class Post < ActiveRecord::Base
  scope :by_position, order("position ASC")
  default_scope by_position
  #...
end

然后@user.posts应该返回一个按位置(ASC)排序的列表。

此外,以下内容应该对您有用:(复数 on post

has_many :posts, :dependent => :destroy, :order => "posts.position ASC"
于 2012-12-20T15:08:17.857 回答