RoR初学者在这里使用rails 3.2.3和ruby 1.9.3
目前,我正在尝试在两个date_times上显示与用户所选日期相匹配的酒店的可用性。
scope :by_availabilities, lambda { |first_day, last_day|
joins(:rooms).
joins('INNER JOIN availabilities ON rooms.id=availabilities.room_id').
where(get_my_where(first_day, last_day)).
group('hotels.id'<other fields>
}
def self.get_my_where(first_day, last_day)
difference = (last_day-first_day).to_i
condition = ""
if (difference==1)
condition = "availabilities.day = '#{first_day}'"
condition+=""
else
for i in 1..difference do
if(i==difference)
condition +="(availabilities.day = '#{first_day}' AND availabilities.availability > 0)"
else
condition+="(availabilities.day = '#{first_day+i}' AND availabilities.availability > 0) AND "
end
end
end
--other innerjoins--
first_day是输入日期,last_day是输出日期,两者都是正确声明的,并且格式正确。
我正确地传递了params,问题是如果我选择今天的日期和tommorow的日期,我只能获得正确的搜索结果。如果我在两者之间放置更多天,那么搜索根本没有给我任何结果,即使这些天数据库中有可用性。
这不是执行此操作的方法吗?我不能把这个搜索放在控制器上,因为有许多INNER JOINS并且它变得“丑陋”,其他过滤器的所有搜索都正常工作,直到我实现了这个。
提前致谢
答案 0 :(得分:0)
您是否可以直接在您定义的范围内使用Between运算符?像这样:
scope :by_availabilities, lambda { |first_day, last_day|
scope = joins(:rooms).
joins('INNER JOIN availabilities ON rooms.id=availabilities.room_id')
(first_day..last_day).each { |day|
scope = scope.where("availabilities.day = ?", day)
}
scope = scope.group('hotels.id'<other fields>)
}