我在Rails模型中有这个" InvoiceSearch":
class InvoiceSearch
attr_reader :date_from, :date_to
def initialize(params)
params||={}
@date_from = parsed_date(params[:date_from], 7.days.ago.to_date.to_s)
@date_to = parsed_date(params[:date_to], Date.today.to_s)
end
我在做什么params||={}
?
什么是
@date_to = parsed_date(params[:date_to], Date.today.to_s)"
完全正确吗?
' parsed_date'的定义:
private
def parsed_date(date_string, default)
Date.parse(date_string)
rescue ArgumentError, TypeError
default
end
end
答案 0 :(得分:0)
因此params ||= {}
相当于params = params || {}
。在Ruby nil
被认为是假的。因此,如果params
为nil
(或false
),则会将其设置为{}
。这在以下代码中非常重要,因为如果params
为nil
,那么params[:date_from]
将导致错误。但如果params
为空哈希,即{}
,则params[:date_from]
将返回nil
,并且不会导致错误。
根据parsed_date
的定义,它将尝试解析date_string
,但如果date_string
为零或无效日期(例如Feb 30, 2015
),则会引发错误。 rescue ArgumentError, TypeError
会处理这些错误,并会返回default
。
如果您的计划希望@date_from
和@date_to
成为Date
个对象,那么您的通话不应包含.to_s
default
,因为这会导致@date_from
要设置为字符串,例如"Wed, 18 Feb 2015"
而不是与今天相对应的实际Date
对象。
总而言之,行@date_to = parsed_date(params[:date_to], Date.today.to_s)
将尝试解析参数date_to
给出的日期并将其转换为Date
对象,但如果参数不是{t}指定的(所以params[:date_to]
是nil
),它是false
或它是无效的日期,然后@date_to
将被分配到默认值,在您的情况下,字符串今天的约会。