基本的に私は2つのクラスを持っています予約と著者です。書籍は複数の著者を持つことができ、著者は複数の書籍を持つことができます。書籍には次のデフォルトスコープがあります。私はその著者に関連付けられているすべての書籍を一覧表示したい著者ショーのページでデフォルトのスコープ(特に順序)をオーバーライドし、その他のものは無効にします
default_scope :order => "publish_at DESC"
ので、私は、次の...
@author = Author.find(params[:id])
@books = @author.books
すべてがこれまでのところ良いですと言います。 author#showページには、その著者に属するすべての書籍が出版日順に並べられて表示されます。
私はまた、本の人気によって分類することができる宝石に取り組んでいます。
問題は、ソートしようとするたびにdefault_scopeが常に途切れることです。そして私がそれを賢明にしようとすると、それが著者の関係を取り除き、データベースのすべての本を返すでしょう。私はそれが動作するはずのように思えるが、それはしません。このような何かを(行うためにActiveRelation except() method を使用することができる場合の例
@books = @author.books.unscoped.sort_by_popularity # returns all books in database
のために私は思ったんだけど。それはそれはdefault_scope順序であるだけではないとき、順番を無視します)
def sort_by_popularity
self.except(:order).do_some_joining_magic.order('popularity ASC')
# |------------| |---------------------|
end
これはなぜ機能しないのでしょうか?どのようにこれを別の方法で動作させるための任意のアイデアですか?私はちょうどdefault_scopeを取り除くことができる知っているが、私はこれを行う別の方法があるのだろうかと思っています。あなたは完全にすることで、既存のORDERを置き換えるためにreorder
を使用することができるはずです
ありがとうございました!それはとても簡単でした。これはまさに私が探していたものです。同意した、これは命を救う人だった。 – Ryan
これまでのところ、再注文は聞いたことがありません。 – natebeaty
私に3番目を許可してください!私は私の名前付きスコープで注文を変更し、それは魅力的に機能しました。 –