ruby-on-rails - rails : sort a has_many using :order is not working due to order by timestamp

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

我有一个 rails 模型可以说
具有 a 的用户与 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 中设计的默认范围,它正在创建不需要的顺序。

问题解决了

最佳答案

您可以使用 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"

关于ruby-on-rails - rails : sort a has_many using :order is not working due to order by timestamp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13974982/

相关文章:

javascript - Rails 部分与 Javascript 监听器在主页上工作,但在其他地方不起作用

ruby-on-rails - rails : replacing try with the Null Object Pattern

ruby-on-rails-3 - 在 ActiveRecord 中标记无效属性

ruby - airbrake notify_airbrake 方法在 Controller 中不起作用

ruby-on-rails - act_as_list 与 has_and_belongs_to_many 关系

ruby-on-rails - .rb 文件中的 Ruby 类

ruby-on-rails - 如何将 iframe 添加到 ruby​​ on rails 4.2.6 中的清理标签?

ruby - Rails 4 直播

ruby-on-rails - 如何让 Rails 的 act_as_list 将新项目添加到列表的开头?

ruby-on-rails - 当使用 update_attributes 更新资源时,acts_as_list 是否应该自动重新排序项目?