2016-05-30 6 views
1

私のコントローラでは、||のような論理演算子を追加する必要がありました。そして& &が私の中にありますが、うまくいきませんので、私は自分自身の条件ごとに異なる変数を作成し、created_at DESCを使っているかのようにそれらを並べ替える方が簡単だと思いました。複数のActiveRecordをレールで時間順に注文するにはどうしたらいいですか?

@postActivity = PublicActivity::Activity.order("created_at DESC").where(owner_id: current_user.following.ids, key: 'posting').limit(20).all 
@commentActivity = PublicActivity::Activity.order("created_at DESC").where(key: 'commenting').limit(20).all 

条件は上記よりもはるかに複雑です。 別の方法を指摘できる場合は、確かに、ありがとう。 PS。私はルビーの初心者です。

答えて

2

(および)、あなたはActiveRecordのスコープを使用することができます - here

は、彼らがその素敵なお問い合わせ条件を命名する目的のために作られていますコードを結合する。

class Activity < ActiveRecord::Base 
    scope :ordered, -> { order(created_at: :desc) } 
    scope :commenting, -> { where(key: 'commenting') } 
    scope :limit, -> { limit(20) } 
.. 

にベース

:: ActiveRecordを継承すなわちクラス、お使いのモデルにスコープを追加し、スコープ(および条件)を組み合わせて、あなただけの

Activity.ordered.commenting.limit... 

一方、何かあなたのためのdefault_scopeがあるのチャニン(SMTまたはSMT)の場合、または条件

デフォルト(で例えば順)で、それはより複雑だ含める - あなたは(ActiveRecordの内部にある)Arel.tableを使用しているようだ - たとえば

ため hereを参照してください
+0

しかし、両方のスコープをどのように組み合わせることができますか? –

+0

と組み合わせて注文するには、それらを連鎖するだけです - > ordered.commenting.etc。 –

+0

1

コントローラのANDとORは、コントローラのクエリで意味しましたか?複雑なSQL問合せを実行しようとすると、アクティブなレコードをバイパスして、未処理のSQLで問合せを実行できます。ここに示されているようfind_by_sql方法の使用レール:条件が乗算され、特定のサンプルについては、http://guides.rubyonrails.org/active_record_querying.html#finding-by-sql

関連する問題