Rails 5 类initialize方法传日期参数仍取默认值问题
问题原因分析
你的初始化方法没有将传入的date1、date2参数显式赋值给对应实例变量,是导致参数不生效的核心原因:
- Ruby中方法的关键字参数属于方法内的局部变量,不会自动同步到同名的实例变量,你没有写
@date1 = date1、@date2 = date2的赋值逻辑,实例变量@date1、@date2初始值永远为nil ||=是“或等”运算符,仅当左侧值为nil或者false时才会执行右侧赋值逻辑,你的代码中@date1初始值恒为nil,因此每次都会被赋值为DEFAULT_DATE1,和你传入的参数完全无关
修正后的代码
def initialize(articles:, date1: nil, date2: nil) @articles = articles # 先把参数值赋值给实例变量,再做默认值兜底 @date1 = date1 || DEFAULT_DATE1 @date2 = date2 || DEFAULT_DATE2 end
如果你需要支持传入false作为合法值(日期场景下通常不需要),可以用更严谨的判空写法:
@date1 = date1.nil? ? DEFAULT_DATE1 : date1
内容的提问来源于stack exchange,提问作者N0ne
相关产品推荐
相关产品推荐

