2012-12-20 41 views
4

我有一个rails模型,比如说说 用户与Post有很多关系。 Post包含一个名为position的属性,用于存储位置(acts_as_list gem)。该位置存储用户发布列表上的位置(该订单不是由于创建/修改了该帖子)。 (t.timestamps在迁移)存储 此外,邮政有时间戳rails:使用has_many排序:order by timestamp

所以我已经定义在User.rb如下:

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

然而,当我做了User.first.posts的帖子没有被位置排序。 我cheked和SQL查询是包含以下内容:

ORDER BY post.created_at DESC, position 

所以仍在使用的created_at。

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

在此先感谢!

解决方案 我有一个默认的作用域在Post中创建了不想要的顺序。

问题解决

回答

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"