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:
- 108 named_scope (rails 2中的一些基础知识)
- Rails 3中的202个活动记录查询(rails 3中的一些基础知识)
- Rails 3中的215个高级查询(rails 3中的一些高级主题)
named_scope对2个案例非常有用
更好的可读性
有了好的named_scope,您可以更轻松地理解您想要搜索的内容。
链接
所有named_scope都可以链接。 因此,如果你想建立一个搜索系统,那很容易做到。 在它痛苦之前制造它。
您可以动态生成链。