我的事件管理应用程序有一个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”代码:
所以我的问题:
提前致谢!
答案 0 :(得分: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
的值?