Rails中命名范围的意义是什么?

在详细说明之前。

问题1: – 这里范围的含义是什么(即命名**范围 )?**

使用命名范围有什么好处?

现在:-

来自Agile Development with Rails的书: –

class Order  ['updated  {:pay_type => :check} end 

这样一个命名的范围将使得查找上周的订单价格变得轻而易举。

  orders = Orders.last_n_days(7) 

范围也可以组合

 orders = Orders.checks.last_n_days(7) 

为什么我们在这里使用named_scope。 我们可以使用相同的方法。 我们使用named_scope得到了什么特别的东西。

范围仅表示某些选定范围。 所以如果你使用:

 orders = Orders.checks.last_n_days(7) 

然后,您只想从订单中选择通过支票付款且在过去7天内的订单。 所以你’范围’订单。

为什么不使用方法?

命名范围是方法。 这只是一种更简单的定义方式,因此您不必关心所有细节,您可以乐意使用它!

并记住,范围只是为sql查询添加一些条件(和其他东西)。

我们得到更短,可链接,更易读的代码:

 orders = Orders.checks.last_n_days(7) 

更具可读性,更短,无法链接

 orders = Orders.all :conditions => ["updated < ? and pay_type='check'", 7] 

在Rails3中,由于arel ,优势将更大。 有关更多信息,我建议您观看Railscasts:

  1. 108 named_scope (rails 2中的一些基础知识)
  2. Rails 3中的202个活动记录查询(rails 3中的一些基础知识)
  3. Rails 3中的215个高级查询(rails 3中的一些高级主题)

named_scope对2个案例非常有用

更好的可读性

有了好的named_scope,您可以更轻松地理解您想要搜索的内容。

链接

所有named_scope都可以链接。 因此,如果你想建立一个搜索系统,那很容易做到。 在它痛苦之前制造它。

您可以动态生成链。