0

イベント管理アプリ用の 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

前もって感謝します!

4

1 に答える 1

0

デバッグするのにトリッキーすぎるべきではありません.. Railsコンソールを開いて、固執してください

UserEvent.joins(:event_dates).where(event_dates: { user_event_date: 10.days.ago..DateTime.now })

..または、日付を変更して、データが返されることを確認します。データが正しいことを確認してください。それが機能する場合、問題は他の場所にあります。

他の質問についてnilは、範囲内で使用しようとすると、 ArgumentError: bad value for range. そうです、どのように動作させたいかにもよりますが、通常の解決策は nil 値をチェックし、実装したい動作に適したものに置き換えることです。

編集- 奇妙なことにnil..nil、範囲は ArgumentError を生成しません。これは、値を正常に設定していないことを意味する可能性があります。user_event_date_fromとの値をどのように設定していますuser_event_date_toか?

于 2013-07-11T15:46:55.283 に答える