在RailsActiveRecord模型中,我们使用作用域,对于作用域,我们传递参数,但我怀疑的是,当我们传递默认值给参数时,它会显示该值的结果,当我们传递值时,它会显示新传递的值的结果,值是如何被覆盖的
这是模型中的范围
scope :ftr_post,->(start_date = Date.yesterday,end_date = Date.tomorrow) {where("created_at between ? and ?",start_date,end_date)}
当我在控制台中运行以下命令时
Post.ftr_post
Post Load (0.1ms) SELECT "posts".* FROM "posts" WHERE (created_at between '2023-01-24' and '2023-01-26')
它返回默认参数
当我运行以下命令时
Post.ftr_post("2023-01-11","2023-01-20").count
Post Count (0.1ms) SELECT COUNT(*) FROM "posts" WHERE (created_at between '2023-01-11' and '2023-01-20')
它显示新传递的参数值
请给我详细解释一下
1条答案
按热度按时间anauzrmj1#
您已经为此编写了代码,并且运行良好。
在ruby中,我们在方法中使用
PARAMETER = ANY_VALUE
来定义默认值。在上面的第一个查询中,您没有传递任何参数,因此它采用默认值
start_date
和end_date
,即Date.yesterday
和Date.tomorrow
。在第二个查询中,您显式传递参数,因此方法将采用该值而不是默认值。因此,它将
start_date
作为2023-01-11
,将end_date
作为2023-01-20
。如果您想了解更多关于parameter with default values in ruby的信息,请阅读此处