Tag: 命名范围

将使用命名范围对错误计算奇数进行分页

我最近将我的查询分解为4个命名范围,以便更容易重新排序,并且将分页,否则总是工作正常,现在计算页数有问题。 named_scope :loc, lambda { |id| { :conditions => [‘location_id = ?’, id ] } } named_scope :datem, lambda { |*args| { :joins => :scannables, :conditions => [ “scannables.bookdate BETWEEN ? and ?”, (args[0].to_date || 3.days.from_now), (args[0].to_date+(args[1] || 3)) ], :group => ‘scannables.hostel_id’, :having => ‘SUM(scannables.available) > ‘ + ((args[1] || 3).to_i-1).to_s } } named_scope […]

Named_scope中的rails唯一记录?

是否可以使named_scope返回记录对于某列是唯一的? 例如 named_scope :unique_styles, :order =>”title desc”, :limit => 3 这将给我三种风格,但如果我想确定标题不同怎么办? 在这种情况下,可能有三个具有相同样式的记录,我希望这个named_scope只给出标题的唯一值。 所以[“style 1”, “style 1”, “style 1”]是不可能的,它会强迫自己给[“style 1”, “some style 2”, “maybe another 3”] 我认为group可能会这样做,而我现在正在使用它。 如果有人有任何评论,不管这是伟大的。

Rails 3:如何根据Controller的方法创建命名范围?

在我的ApplicationController我有demo_mode? method(当前登录的用户类型为“demo”时返回true )。 Post model具有publisher_id字段,该字段引用Users表。 User具有user_type字段,其中一个可能的值是“demo”。 底线:post p由“demo”用户发布,当且仅当: User.find(p.publisher_id).user_type == “demo” 我想创建一个命名范围Post.relevant ,它将返回: “demo”用户发布的所有post,如果是demo_mode? == true demo_mode? == true 非“演示”用户发布的所有post,如果是demo_mode? == false demo_mode? == false 你会如何创建这样一个命名范围? 我应该移动demo_mode? 到其他地方?

检查模型实例是否属于rails中的named_scope

假设我有一个命名范围: class Foo ‘some_field = 1′ end 这适用于查询,我定义了一堆有用的named_scopes。 我想要的是能够做到这一点: f = Foo.find(:first) f.some_field = 1 f.is_bar? #=> true 酒吧?’ 如果模型实例属于命名范围,则method将简单地返回true或false。 不管怎么说没有写’is_bar’吗? 即使我已经写了一个很好的方法来检查’is_bar’是否有问题? 如果我没记错的话,DRY很好,所以任何帮助都会非常感激/

Rails named_scopeinheritance?

我试图通过提供一个inheritance的公共基础模型来概括我的一些模型,其包含一些相互的named_scope声明和一个filter方法,该方法激活该搜索以便在控制器端进行更简单的查询。 这在我在控制台中运行时似乎正在工作,但在控制器中失败时: # in the base model class GenericModel [ “#{self.table_name}.name like ?”, “%#{name}%” ] } } def filter(params) res = [] res = self.by_name( (params[:name] or ”) ) if params[:name] return res end end class MyModel > params = { :name => ‘jimmy’ } >> MyModel.filter(params) => [ , … ] nil # fails […]

链接命名范围不按预期工作

我有2个简单的命名范围定义如下: class Numbers {:title => [‘2′,’4′,’6’]} named_scope :odd, :conditions => {:title => [‘1′,’3′,’5’]} end 如果我打电话给Numbers.even我回来2,4,6这是正确的,如果我打电话给Numbers.odd我回来1,3,5这是正确的 当我将它们链接在一起时,这样:Numbers.even.odd我得到1,3,5因为这是我引用的最后一个范围。 所以,如果我说Numbers.odd.even,我实际上会得到2,4,6。 当我将它们连在一起时,我希望得到1,2,3,4,5,6。 我尝试的另一种方法是: named_scope :even, :conditions => [“title IN (?)”, [‘2’, ‘4’,’6′]] named_scope :odd, :conditions => [“title IN (?)”, [‘1’, ‘3’,’5′]] 但是当我将它们链接在一起时,我得不到任何结果,因为它创建的查询看起来像这样: SELECT * FROM `numbers` WHERE ((title IN (‘1′,’3′,’5’)) AND (title IN (‘2′,’4′,6′))) ‘AND’子句应该改为OR,但我不知道如何强迫它。 这可能是ActiveRecord的问题吗?

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得到了什么特别的东西。

有没有办法将命名范围合并到一个新的命名范围?

我有 class Foo { :a => a } } named_scope :b, lambda { |b| :conditions => { :b => b } } end 我想要 class Foo { :a => a, :b => b } } end 但我更愿意以干燥的方式做到这一点。 我可以通过使用获得相同的效果 Foo.a(something).b(something_else) 但它并不是特别可爱。

如何在命名范围内拥有多个条件?

我有一个用户模型。 我可以通过执行a_user.try(:admin?)来检查用户是否是管理员。 我想定义一个命名范围,它可以在最后X分钟内更新所有用户,而不是管理员。 到目前为止我有: scope :recent, lambda { { :conditions => [‘updated_at > ?’, 5.minutes.ago] } } 这成功地使所有用户在最近5分钟内更新,但如何合并管理员检查? 我不知道如何在范围内的用户实例上调用try() …

使用带有子模型计数的named_scope

我有一个有很多孩子的简单父对象。 我正在试图弄清楚如何使用命名范围来恢复具有特定数量的孩子的父母。 这可能吗? class Foo 1 end class Bar < ActiveRecord::Base belongs_to :foo end 我希望做一些像Foo.with_one_bar这样的事情 我可以在父类上编写类似这样的方法,但我宁愿拥有命名范围的强大function