【问题标题】:Rails: finding records where attribute includes some valueRails:查找属性包含某些值的记录
【发布时间】:2014-08-16 15:57:39
【问题描述】:

我有一个包含不同位置的“商店”模型。每个商店的属性之一是所携带的“品牌”。

示例:Store1,品牌:“Nike、Adidas、Polo”; Store2,品牌:“Jcrew, Polo”

我希望能够选择品牌包含“阿迪达斯”的所有商店(也可能包含其他品牌)

类似的东西:

@search = Stores.where(brands: params[:brand]) 

但需要它是

@search = Stores.where(brands.include? params[:brand]) 

这显然行不通

解决这个问题的最佳方法是什么?

【问题讨论】:

  • brands 似乎是一个字符串。对吗?
  • 正确。 “耐克、阿迪达斯、马球”等
  • 部分问题可能在于这不是跟踪品牌的最佳方式。品牌应该通过关联的连接表规范化到他们自己的表中。适当的架构可以避免整个问题。

标签: ruby-on-rails include where


【解决方案1】:

如果brands是一个字符串并且params[:brand]包含一个单一的品牌名称,你可以使用MySQL的LIKE函数:

@search = Stores.where(['BRANDS LIKE ?', "%#{params[:brand]}%"]) 

【讨论】:

    【解决方案2】:

    您可以使用以下语句来做到这一点。

    @search = Stores.where("brands = ?", params[:brand])
    

    Hardtl rails tutorial 的清单 11.43 中给出了一个类似的示例

    您还应该注意,rails 模型通常具有单数名称,即 Store 而不是 Stores。

    【讨论】:

    • 这和where(brands: params[:brand])完全一样
    猜你喜欢
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2018-03-25
    相关资源
    最近更新 更多