web-dev-qa-db-ja.com

タイトルを注文するスコープを構築する方法

title(:title)で順序付けされるスコープを作成しようとしています。タイトル列はPostモデルにあります。アクティブレコードのクエリセクションの scopesセクションStackOverFlowの1つ を読みましたが、明確ではありません。誰かが私を正しい方向に向けることができますか?

私には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 
11
BV45

ない場合default_scope with order

scope :ordered_by_title, -> { order(title: :asc) }

default_scope with order次に、 reorder を使用する必要があります:

default_scope { order(created_at: :desc) }
scope :ordered_by_title, -> { reorder(title: :asc) }

またはorder with unscope

default_scope { order(created_at: :desc) }
scope :ordered_by_title, -> { order(title: :asc).unscope(:order) }

reorderメソッドは、デフォルトのスコープ順序をオーバーライドします。

38
Sharvy Ahmed

残念ながら、単純なorderは機能しません。アクティブレコードを使用すると、1つの関連付けで複数の注文を指定できます(最初にcreated_at列、次にtitle-この場合、2番目の順序は何も変更しません)。 Railsに、reorderメソッドを使用して前の注文ステートメントを無視することを伝えます。

scope :ordered_by_title, -> { reorder(title: :asc) }
12
BroiSatse