ruby-on-rails 在Rails中传递参数

mwecs4sa  于 2023-01-27  发布在  Ruby
关注(0)|答案(1)|浏览(211)

在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')

它显示新传递的参数值
请给我详细解释一下

anauzrmj

anauzrmj1#

您已经为此编写了代码,并且运行良好。

scope :ftr_post,->(start_date = Date.yesterday,end_date = Date.tomorrow) {where("created_at between ? and ?",start_date,end_date)}

在ruby中,我们在方法中使用PARAMETER = ANY_VALUE来定义默认值。

Post.ftr_post

在上面的第一个查询中,您没有传递任何参数,因此它采用默认值start_dateend_date,即Date.yesterdayDate.tomorrow

Post.ftr_post("2023-01-11","2023-01-20").count

在第二个查询中,您显式传递参数,因此方法将采用该值而不是默认值。因此,它将start_date作为2023-01-11,将end_date作为2023-01-20
如果您想了解更多关于parameter with default values in ruby的信息,请阅读此处

相关问题