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
ない場合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
メソッドは、デフォルトのスコープ順序をオーバーライドします。
残念ながら、単純なorder
は機能しません。アクティブレコードを使用すると、1つの関連付けで複数の注文を指定できます(最初にcreated_at
列、次にtitle
-この場合、2番目の順序は何も変更しません)。 Railsに、reorder
メソッドを使用して前の注文ステートメントを無視することを伝えます。
scope :ordered_by_title, -> { reorder(title: :asc) }