在 Rails3 中使用多个作用域参数

发布于 2024-12-28 22:49:02 字数 637 浏览 1 评论 0原文

在我的 Rails3 应用程序中,我有 AR 范围,需要 3 个参数

两个代码值之间获取给定模块的错误详细信息,

#select * from error_codes where error_module_id=1 and code >0 and code < 100

scope :latest_error_code, lambda{ |module_id, min, max|
    {:conditions => "error_module_id=#{module_id} and code >= #{min} and code <= #{max}"}
} 

例如:我试图在控制台中的

ErrorCode.latest_error_code(1,0,100)

但当我尝试执行此操作时,我得到以下信息错误

multiple values for a block parameter (3 for 1)

,当我仔细观察时,AR 范围似乎不支持多个参数

1 - 这是真的吗? (AR 不支持范围的多个参数) 2 - 还有其他选择吗? 3 - 我在这里做错了什么吗?

提前致谢

In my Rails3 app I have AR scope which requires 3 parameters

Ex: I'm trying to get an error details for a given module between two code values

#select * from error_codes where error_module_id=1 and code >0 and code < 100

scope :latest_error_code, lambda{ |module_id, min, max|
    {:conditions => "error_module_id=#{module_id} and code >= #{min} and code <= #{max}"}
} 

in my console I do

ErrorCode.latest_error_code(1,0,100)

But when I try to execute this, I'm getting the following error

multiple values for a block parameter (3 for 1)

and when i did some goggling, it appears to be that AR scope doent support multiple parameters

1 - is it true? (AR doent support multiple params for scope)
2 - Is there any other alternative?
3 - Am I doing something wrong here?

thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

枉心 2025-01-04 22:49:02

来自Active Record 查询界面指南

使用类方法是接受作用域参数的首选方式。

所以你可能想要更像这样的东西:

def self.latest_error_code(module_id, min, max)
    where(
        'error_module_id = :module_id and code between :min and :max',
        :module_id => module_id, :min => min, :max => max
    )
} 

From the Active Record Query Interface Guide:

Using a class method is the preferred way to accept arguments for scopes.

So you probably want something more like this:

def self.latest_error_code(module_id, min, max)
    where(
        'error_module_id = :module_id and code between :min and :max',
        :module_id => module_id, :min => min, :max => max
    )
} 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文