2 つの名前付きスコープを持つイベント モデルがあります。
class Event < ActiveRecord::Base
scope :future, lambda { where('events.date >= ?', Time.zone.now) }
scope :past, lambda { where('events.date <= ?', Time.zone.now) }
end
2 つの新しいコントローラー アクション ("future" と "past" という名前) を作成して、コントローラーからこれらのスコープを呼び出します。
私のコントローラー:
class EventsController < InheritedResources::Base
actions :index, :show, :future, :past
has_scope :future
has_scope :past
def future
index! { @events = Event.future }
end
def past
index! { @events = Event.past }
end
end
これらの追加アクションのビューとルートもあります。
これはうまくいきます。私のアプリケーションは私が望むことを行い、次のようにサイドバーで新しいアクションにリンクできます。
%li
= link_to 'Events Home', events_path
%li
= link_to 'Future Events', future_events_path
%li
= link_to 'Past Events' past_events_path
この設定に関する私の問題は、問題なく動作しますが、これらの追加のスコープのために新しいアクション、ビュー、およびルートを作成する必要があるという事実が気に入らないことです。私はこれを正しい方法でやっているとは思わない。基本的に、インデックス ページで結果をフィルタリングしようとしていますが、これを行うには新しいアクション、ルート、ビューを作成する必要があります。ちょっと面倒くさいので、他に方法がないか検討中です。
「未来」と「過去」のコントローラー アクションを廃止し、次のようにビューからスコープを呼び出すだけでよいと思います。
%li
= link_to 'Events Home', events_path
%li
= link_to 'Future Events', events_path.future
%li
= link_to 'Past Events' events_path.past
明らかにそれはうまくいきません。カスタム select_tag ヘルパーを使用する例を見てきましたが、select タグや JS なしで機能するようにかなり変更できます...
今のやり方を貫いた方がいいのか