【问题标题】:how can we add default parameters in model scope in rails?我们如何在 Rails 的模型范围内添加默认参数?
【发布时间】:2023-03-25 15:33:01
【问题描述】:

我的模型中有以下范围。

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


    【解决方案1】:

    Ruby 实际上有ranges。使用它们。

    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 的事情是,它只是用于在单行中创建类方法的语法糖。您添加到块/lambda 的任何参数都将是该方法的参数。

    但是,如果您的方法带有参数,它可能不适合长度合适的单行。因此,您首先不应该使用scope。虽然您可以编写具有范围的多行方法,但它完全是一种毫无意义的元编程级别,因为它采用完全相同的行数并且可读性较差,并且无法被无法找到动态生成的方法的工具检测到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 2011-09-02
      • 1970-01-01
      • 2020-11-27
      相关资源
      最近更新 更多