【问题标题】:Where Clause with Equality and Like Condition RoR 4具有相等和类似条件的 Where 子句 ForR 4
【发布时间】:2015-03-18 06:35:17
【问题描述】:

我可以在 RoR 4 中有这样的声明吗:

@vendors = Vendor.includes(:business).where(:business_id=>@business.id,:city_id=>city,:activated=>"1",["business.business_name LIKE ?","%#{params[:search]}%"]).page(params[:page]).per_page(10)

如果没有,那我该怎么做呢?

【问题讨论】:

    标签: mysql ruby-on-rails ruby-on-rails-4


    【解决方案1】:

    不,您不能这样做,但您可以.where() 调用链接在一起,即。

    .where(business_id: @business.id).where("businesses.business_name LIKE ?", "%#{params[:search]}%")
    

    请注意,您需要包含 .references(:business) 以确保执行 LEFT JOIN

    Vendor.includes(:business).references(:business).where(business_id:@business.id, etc..).where('businesses.business_name LIKE ?", "%#{params[:search]}%")
    

    【讨论】:

    • 这样的?:@vendors = Vendor.includes(:business).where(:business_id=>@business.id,:city_id=>city,:activated=>"1").where("business.business_name LIKE ?","%#{params[:search]}%").page(params[:page]).per_page(10)
    • 我试过了,但它给了我这个错误:Mysql2::Error: Unknown column 'business.business_name' in 'where clause': SELECT COUNT(*) FROM vendors` WHERE vendors.business_id = 5 AND vendors.city_id = 1 AND vendors.@987654333 @ = '1' AND (business.business_name LIKE '%abc%')`
    • 这确实有效,但它没有我需要的类似子句:@vendors = Vendor.includes(:business).where(:business_id=>@business.id,:city_id=>city,:activated=>"1","business.business_name"=>params[:search]).page(params[:page]).per_page(10)
    • 如果没有您需要的子句,那么说它确实有效是错误的。另一个可能不起作用,因为您的表名可能是复数形式,即。你需要在你的字符串中有businesses.business_name。我假设你已经有了正确的名字。
    • 正如我在回答的更新中提到的,它强制 LEFT JOIN 发生,否则 Rails 只会在看到对 includes 表的引用时执行 LEFT JOIN,它看不到您何时提供字符串参数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多