Ruby on rails 如果参数为';不在场
我试图创建一个函数,如果没有设置日期参数,它将返回默认值 如果参数[:开始时间]不Ruby on rails 如果参数为';不在场,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我试图创建一个函数,如果没有设置日期参数,它将返回默认值 如果参数[:开始时间]不present?returnDateTime.now如果参数[:结束时间]不present?return1.week.from\u now 我想在一个函数中保留这两个检查,但我无法使其工作。有没有更好的办法 # Main search function def self.search params, location self .join.not_booked .close_to(V
present?
returnDateTime.now
如果参数[:结束时间]不present?
return1.week.from\u 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
如果将这两种方法结合起来不是一个困难的要求,那么您可以简单方便地使用这两种不同的方法来检查
start\u time
和end\u 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
然后,在主搜索函数中相应地使用它们(开始日期(验证开始日期参数[:开始时间])
和结束日期(验证结束日期参数[:结束时间])
):
也许我误解了,但为什么不:
def self.check param
result = 1.week.from_now
if param[:end_time].present?
result = param[:end_time].to_datetime
end
return result
end
如果我们将您的第二个“结束时间”检查放入一个函数中,它将始终覆盖“开始时间”中的任何可能结果。这不是一个硬性要求。我可能只是这样做,然后继续。这样,它比用一个单一的方法来处理if/else更简单、更干净。嗯,是的,我会同意的。谢谢。@Batman这并不能真正解决你的问题。它只是用来说明在单个函数中实现您想要的功能是不可行的。除非你想返回多个对象,然后分配。我明白了,知道这个很好。我最终使用了两个函数。更简单。谢谢
def self.check param
result = 1.week.from_now
if param[:end_time].present?
result = param[:end_time].to_datetime
end
return result
end