rails:使用以下命令对has_many进行排序:由于按时间戳排序,订单无法正常工作

时间:2012-12-20 15:04:29

标签: ruby-on-rails ruby-on-rails-3 acts-as-list

我有一个铁轨模型让我们说 用户与Post有很多关系。 Post包含一个名为position的属性,用于存储位置(acts_as_list gem)。该位置将位置存储在用户帖子列表上(该顺序不是由于帖子的创建/修改)。 此外,Post还存储了时间戳(迁移中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中创建了一个默认范围,因为它创建了不需要的顺序。

问题解决了

1 个答案:

答案 0 :(得分:4)

您可以使用default scope

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

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

此外,以下内容适合您:( post上的复数)

has_many :posts, :dependent => :destroy, :order => "posts.position ASC"