イベント管理アプリ用の UserEvent クラスがあり、ユーザー イベントには、イベントが発生したときに多くのイベント日付を含めることができます。
class UserEvent < ActiveRecord::Base
...
has_many :event_dates
...
end
EventDate クラスには user_event_date プロパティがあります。
class EventDate < ActiveRecord::Base
attr_accessible :user_event_date, :start_time, :end_time
belongs_to :user_event, inverse_of: :event_dates
...
end
Search クラスがあり、検索が実行されると、find_user_events メソッドがユーザー イベントをフィルタリングするため、user_event_date が検索オブジェクトの user_event_date_from プロパティと user_event_date_to プロパティの間にあるユーザー イベントのみが残ります。
class Search < ActiveRecord::Base
attr_accessible :user_event_date_from, :user_event_date_to
private
def find_user_events
if user_event_date_from.present? || user_event_date_to.present?
time_range = user_event_date_from..user_event_date_to
user_events = UserEvent.joins(:event_dates).where(event_dates: {user_event_date: time_range})
end
end
ただし、フィルターは機能せず、すべてのレコードが返されます。「結合されたテーブルで条件を指定する」セクションの下にあるこの Rails ガイドから、この「where」コードを取得しました。
だから私の質問:
- これを機能させる方法は?
- ユーザーが user_event_date_from のみを指定した場合 (user_event_date_to は nil になります)、範囲は user_event_date_from から nil になるため、これは機能しますか、またはそれを検出して範囲を次のように設定する必要があります: user_event_date_from..user_event_date_from
前もって感謝します!