BV4*_*V45 11 ruby-on-rails ruby-on-rails-3.2 rails-activerecord
我正在尝试创建一个将按顺序排序的范围title(:title).标题列位于Post Model中.我通读了Active Record查询部分的范围部分和StackOverFlow上的部分,但不是很清楚.有人可能指出我正确的方向吗?
我有4个型号:
Comment
Post
User
Advertisement
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
Sha*_*med 36
当你没有任何default_scope有order:
scope :ordered_by_title, -> { order(title: :asc) }
Run Code Online (Sandbox Code Playgroud)
当你有一个default_scopewith order然后你需要使用reorder:
default_scope { order(created_at: :desc) }
scope :ordered_by_title, -> { reorder(title: :asc) }
Run Code Online (Sandbox Code Playgroud)
或order用unscope:
default_scope { order(created_at: :desc) }
scope :ordered_by_title, -> { order(title: :asc).unscope(:order) }
Run Code Online (Sandbox Code Playgroud)
该reorder方法将覆盖默认范围顺序.
Bro*_*tse 12
不幸的是简单order不起作用.Active Record允许您在单个关联上指定多个订单(这将首先按created_at列title排序,然后按顺序排序 - 在这种情况下,第二个排序不会更改任何内容).您需要使用reorder方法告诉rails您要忽略先前的订单声明.
scope :ordered_by_title, -> { reorder(title: :asc) }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16984 次 |
| 最近记录: |