2015-09-05 59 views
1

我想創建一個函數,如果未設置日期參數將返回默認值。如果參數不存在提供默認值

如果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 

回答

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 
+0

這不是一個硬性要求。我可能會這樣做,繼續前進。 – Batman

+0

這樣,它比在一個單獨的方法中對這些if/else變得更加簡單和乾淨。恕我直言。 –

+1

是的,我只是要去那個。謝謝。 – Batman

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」如果我們把它變成一個功能。

+0

這似乎更多的工作,然後上述解決方案 – Batman

+1

@Batman這並不能真正解決您的問題。它只是用來說明在單個函數中實現所需的功能是不可行的。除非你想返回多個對象並在之後分配。 –

+0

我明白了,很高興知道。我最終使用了2個函數。這很簡單。謝謝。 – Batman