如何建立订单标题的范围
How to build scope to order title
我正在尝试创建一个将按 title(:title)
排序的范围。标题列位于 Post 模型中。我通读了 scopes section on the Active Record querying section and the 但不是很清楚。有人可以指出我正确的方向吗?
我有 4 个模型:
Comment
Post
User
Advertisement
class Post < ActiveRecord::Base
attr_accessible :body, :title, :user
has_many :comments
belongs_to :user
default_scope {order('created_at DESC')}
scope :ordered_by_title {order('title' )} #What I initially built
end
当你没有任何 default_scope
with order
:
scope :ordered_by_title, -> { order(title: :asc) }
当你有 default_scope
和 order
时,你需要使用 reorder
:
default_scope { order(created_at: :desc) }
scope :ordered_by_title, -> { reorder(title: :asc) }
或order
与unscope
:
default_scope { order(created_at: :desc) }
scope :ordered_by_title, -> { order(title: :asc).unscope(:order) }
reorder
方法覆盖默认范围顺序。
不幸的是,简单的 order
行不通。 Active Record 允许您在单个关联上指定多个顺序(首先按 created_at
列排序,然后按 title
排序 - 在这种情况下,第二次排序不会改变任何内容)。您需要告诉 rails 您想要使用 reorder
方法忽略之前的订单语句。
scope :ordered_by_title, -> { reorder(title: :asc) }
我正在尝试创建一个将按 title(:title)
排序的范围。标题列位于 Post 模型中。我通读了 scopes section on the Active Record querying section and the
我有 4 个模型:
Comment
Post
User
Advertisement
class Post < ActiveRecord::Base
attr_accessible :body, :title, :user
has_many :comments
belongs_to :user
default_scope {order('created_at DESC')}
scope :ordered_by_title {order('title' )} #What I initially built
end
当你没有任何 default_scope
with order
:
scope :ordered_by_title, -> { order(title: :asc) }
当你有 default_scope
和 order
时,你需要使用 reorder
:
default_scope { order(created_at: :desc) }
scope :ordered_by_title, -> { reorder(title: :asc) }
或order
与unscope
:
default_scope { order(created_at: :desc) }
scope :ordered_by_title, -> { order(title: :asc).unscope(:order) }
reorder
方法覆盖默认范围顺序。
不幸的是,简单的 order
行不通。 Active Record 允许您在单个关联上指定多个顺序(首先按 created_at
列排序,然后按 title
排序 - 在这种情况下,第二次排序不会改变任何内容)。您需要告诉 rails 您想要使用 reorder
方法忽略之前的订单语句。
scope :ordered_by_title, -> { reorder(title: :asc) }