我的事件管理应用程序有一个 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 指南的“指定连接表的条件”部分下得到了这个“位置”代码:
所以我的问题:
- 如何让它工作?
- 如果用户仅指定 user_event_date_from(user_event_date_to 将为 nil)将起作用,因为范围将从 user_event_date_from 到 nil,或者我应该检测到并将范围设置为:user_event_date_from..user_event_date_from
提前致谢!