我们如何在Rails的模型范围内添加默认参数?

问题描述 投票:0回答:2

我的模型中具有以下范围。

class Referral < ActiveRecord::Base
  scope :date_range, -> (start_date,end_date) { where("created_at <= ? AND created_at >= ?", start_date, end_date) }
end

calling like this :- Referral.date_range(Date.today,Date.today)

如何更改此范围,以便在调用时不传递任何参数的情况下,以当前日期为开始日期和结束日期。

ruby-on-rails parameters scope rails-activerecord default
2个回答
0
投票
class Referral < ActiveRecord::Base def self.created_between(range = Date.today.beginning_of_day..Date.today.end_of_day) where(created_at: range) end end

每个人都忘记scope的地方在于,它只是一种语法,可以在单行代码中创建类方法。您通过block / lambda传递的任何参数将是该方法的参数。

但是,如果您的方法接受参数,那么它可能不适合较长长度的单线。因此,您不应该首先使用scope。尽管您可以使用范围编写多行方法,但它却是完全毫无意义的元编程级别,因为它占用的行数完全相同,并且可读性较低,并且无法通过无法找到动态生成的方法的工具进行检测。

-1
投票
© www.soinside.com 2019 - 2024. All rights reserved.