Phi*_*eon 13 ruby-on-rails ruby-on-rails-3
我正在创建一个系统,需要确保计划中的"旅行"不要超过一圈.为此,我尝试验证start_date和end_date,以确保它们不在另一个行程的开始和结束日期之内.
class TripdateValidator < ActiveModel::EachValidator
def validate_each(object, attribute, value)
# Check value exists as end_date is optional
if value != nil
parsed_date = Date.parse(value)
# is the start date within the range of anything in the db
trips = Trip.where(['start_date >= ? AND end_date <= ? AND user_id = ?', parsed_date, parsed_date, object.user_id])
# overlapping other trips, aghhh
object.errors[attribute] << 'oh crap' if trips
end
end
end
Run Code Online (Sandbox Code Playgroud)
日期来自type ="date"字段,该字段由jQuery UI Datepicker提供,并包含格式2011-01-01.这是2011-01-30 00:00:00 UTC的轨道,我不完全理解.
如果我尝试对此值使用Date.parse(),则会给出错误:
TripsController中的TypeError #create
$ _ value需要是String(nil给出)
Rails.root:
/Users/phil/Sites/travlrapp.com
应用程序跟踪| 框架跟踪|
完整追踪app/models/trip.rb:29:在创建' app/controllers/trips_controller.rb:74:在 'create'中
validate_each'
app/controllers/trips_controller.rb:75:in
每当我运行查询时,都不会返回任何内容.这可能是一个日期格式问题,我的逻辑是破碎还是我做了一些非常愚蠢的事情?被困在这一段时间谷歌没有帮助.
编辑人们注重Date.parse错误,但不是主要问题.我陷入困境的是,当一切都是完全不同的格式时,我不明白如何进行日期比较.
我已经为Chronic.parse()交换了Date.parse(),现在我生成了以下SQL查询:
SELECT "trips".* FROM "trips" WHERE (start_date >= '2011-01-26 00:00:00.000000' AND end_date <= '2011-01-26 00:00:00.000000' AND user_id = 19)
Run Code Online (Sandbox Code Playgroud)
这什么都不返回.我测试的日期是:
开始时间:2011-02-17 00:00:00.000000结束时间:2011-02-21 00:00:00.000000
看来我认为日期格式正确,现在看起来更像是一个逻辑问题.我怎么能验证重叠日期>.
小智 10
Squeel power FTW !!! 我相信你一定会喜欢它
$ gem install squeel
model.rb
Model.where{date_colum > 10.years.ago & date_column < DateTime.now}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13113 次 |
| 最近记录: |