首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接named_scopes

链接named_scopes
EN

Stack Overflow用户
提问于 2013-04-04 17:03:19
回答 1查看 133关注 0票数 0

我有一个关于使用named_scopes的问题:

假设我有以下模型(我知道我提供的一些named_scope可以通过active record直接实现,但它们只是为了示例):

代码语言:javascript
复制
def person

    named_scope :older_then, lambda {|min_age| {:conditions => ["age > ?",min_age]} }
    named_scope :by_first_name, lambda {|name| {:conditions => {:first_name => name}}}

    def self.some_function(age_param, name_param)
       chain = Person
       chain = chain.older_then(age_param) unless age_param.blank?
       chain = chain.by_first_name(name_param) unless name_param.blank?
       chain.all
    end
end

现在假设我想要调用:

代码语言:javascript
复制
people = Person.some_function(20, "john")

在构建named_scopes链时,Rails将对数据库进行两次调用:

代码语言:javascript
复制
select * from persons where age>20
select * from persons where age>20 and name='john'

显然,我只想要第二个查询的结果,并不打算在构建named_scopes链时执行第一个查询。你知道我在这里做错了什么吗/按条件组合多个named_scope的正确方法是什么?

顺便说一句,我用的是Ruby 1.8.7,这是旧的,我知道...:(

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-05 00:26:19

更改此设置:

代码语言:javascript
复制
def self.some_function(age_param, name_param)
   chain = Person

至:

代码语言:javascript
复制
def self.some_function(age_param, name_param)
   chain = self

这将保持原始链的完整,而不是开始一个新的链。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15806820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档