【问题标题】:how do you perform a SQL find in (?) call?您如何在 (?) 调用中执行 SQL 查找?
【发布时间】:2011-07-29 02:49:24
【问题描述】:

这似乎不起作用:

@zip = %w[07005, 07034, 07035]

CardSignup.find(:all, :conditions => ["zip_code IN (?)", @zip])

=> [ ]

但是,如果我用第二个邮政编码做一个简单的 find_by,它会返回一个结果:

CardSignup.find_by_zip_code("07034")

=> Object<x01231 ..

我做错了什么?

【问题讨论】:

    标签: mysql ruby-on-rails arrays conditional


    【解决方案1】:

    您的数组实现不正确。你现在拥有逗号的方式是每个数组对象的一部分:

    >> %w[07005, 07034, 07035]
    => ["07005,", "07034,", "07035"]
    

    你应该在去掉逗号的情况下实现这个:

    >> %w{07005 07034 07035}
    => ["07005", "07034", "07035"]
    

    或:

    >> [07005, 07034, 07035]
    => [07005, 07034, 07035]
    

    所以完整的实现是:

    @zip = %w{07005 07034 07035}
    
    CardSignup.find(:all, :conditions => ["zip_code IN (?)", @zip])
    
    => [Object<x01231 ..
    

    【讨论】:

      【解决方案2】:
      Don't use comma in %w[07005, 07034, 07035]
      
      Just use  %w[07005 07034 07035]
      

      【讨论】:

        【解决方案3】:

        试试:

        CardSignup.find_by_zip_code(@zip)
        

        编辑(来自 cmets):

        How to select where ID in Array Rails ActiveRecord without exception

        @zip = ["07005", "07034", "07035"]
        CardSignup.find(:all, :conditions => ["zip_code IN (?)", @zip])
        
        CardSignup.find_all_by_zip_code(["07005", "07034", "07035"])
        

        【讨论】:

        • 如何更改该语法以在其中包含 OR 语句?我正在寻找的最终结果是 Rails/SQL 语法而不是 Rails 助手。
        • 你使用的是什么版本的 Rails?
        • 你混淆了两个不同的数组初始化。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-21
        • 2020-02-21
        • 2021-07-04
        • 1970-01-01
        相关资源
        最近更新 更多