我试图创建一个在未设置日期参数时将返回默认值的函数。
如果params [:start_time]不是present?
则返回DateTime.now
,如果params [:end_time]不是present?
则返回1.week.from_now
我希望将这两项检查保留在一个功能中,但我无法使其正常工作。如果有更好的方法?
# Main search function
def self.search params, location
self
.join.not_booked
.close_to(Venue.close_to(location))
.activity(Activity.get_ids params[:activity])
.start_date(valid_date params[:start_time])
.endg_date(valid_date params[:end_time])
.ordered
end
# Check if date is nil
def self.valid_date date
if date
date.to_datetime
elsif date == params[:start_time]
DateTime.now
elsif date == params[:end_time]
1.week.from_now
end
end
问另一种方式:
结合这两个功能的最佳方法是什么?
# Check if date is nil
def self.check_start date
date.present? ? date.to_datetime : DateTime.now
end
def self.check_end date
date.present? ? date.to_datetime : 1.week.from_now
end
答案 0 :(得分:1)
如果将这两种方法结合起来并不是一项艰难的要求,您可以简单轻松地使用这两种不同的方法来检查start_time
和end_time
的有效性:
def self.validate_start_date start_date
start_date.present? ? start_date.to_datetime : DateTime.now
end
def self.validate_end_date end_date
end_date.present? ? end_date.to_datetime : 1.week.from_now
end
然后,在您的主搜索功能中相应地使用它们(start_date(validate_start_date params[:start_time])
和end_date(validate_end_date params[:end_time])
):
# Main search function
def self.search params, location
self
.join.not_booked
.close_to(Venue.close_to(location))
.activity(Activity.get_ids params[:activity])
.start_date(validate_start_date params[:start_time])
.end_date(validate_end_date params[:end_time])
.ordered
end
答案 1 :(得分:0)
也许我误解了,但为什么不呢:
def self.check param
result = 1.week.from_now
if param[:end_time].present?
result = param[:end_time].to_datetime
end
return result
end
如果我们把它放在一个函数中,你的第二个“end_time”检查将始终覆盖“start_time”的任何可能结果。