【问题标题】:Rails .where query not workingRails .where 查询不起作用
【发布时间】:2016-04-17 05:00:53
【问题描述】:

我有一个名为 Toys 的表,其中包含 toy_id, company_id, store_id, name and description

我正在尝试对表进行如下查询: toys = @company.toys.where("store_id = ? AND (name LIKE ? OR description LIKE ?)", params[:store_id], params[:query], params[:query]

这个想法是,如果用户转到以下 url:https://myapp.com/api/toys/search?store_id=8&query="robot",它将返回由 store_id 表示的商店的所有玩具,这些玩具具有 namedescription LIKE robot。每次它返回空 JSON。不完全确定为什么?任何帮助或指导将不胜感激。

【问题讨论】:

  • 试试这个toys = @company.toys.where("store_id = ? AND (name LIKE ? OR description LIKE ?)", params[:store_id], "%#{params[:query]}%", "%#{params[:query]}%"
  • 如果我没记错的话,那很容易受到 SQL 注入的攻击。
  • ? 将负责消毒
  • @axlj 他正在接收参数查询而不是名称或描述。 myapp.com/api/toys/search?store_id=8&query="robot"
  • 如果您查看 url,我希望 :query 用于匹配 toy.descriptiontoy.name

标签: mysql ruby-on-rails rails-activerecord grape-api


【解决方案1】:

请参阅@PardeepDhingra 原始问题中的第一条评论

toys = @company.toys.where("store_id = ? AND (name LIKE ? OR description LIKE ?)", params[:store_id], "%#{params[:query]}%", "%#{params[:query]}%"

【讨论】:

    【解决方案2】:

    因为你有一个叫玩具的桌子,你可以试试这样的:

    @toys = Toy.where("company_id = ? AND store_id = ? AND (name LIKE ? OR description LIKE ?)", params[:company_id], params[:store_id], params[:query], params[:query]
    

    希望对你有帮助!

    【讨论】:

      【解决方案3】:

      使用 Arel 样式:

      companies = Company.arel_table
      
      toys = @company.where(store_id: params[:store_id]).where(companies[:name].matches(params[:query]).or(companies[:description].matches(params[:query])))
      

      甚至:

      companies = Company.arel_table
      
      search_query = companies[:name].matches(params[:query]).or(companies[:description].matches(params[:query]))
      
      toys = @company.where(store_id: params[:store_id]).where(search_query)
      

      【讨论】:

      • 我会试试这个
      猜你喜欢
      • 2017-08-03
      • 2015-03-10
      • 1970-01-01
      • 2012-03-21
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多