如何返回包含include的客户端数组?

时间:2016-03-18 20:59:10

标签: ruby ruby-on-rails-4

客户有许多不同颜色的衬衫:红色,蓝色,粉红色等。我想挑选所有穿着红色衬衫的客户。怎么样?

衬衫的存储方式如下:

c = Client.last
c.shirt #=> "red,blue,pink"

如果客户有一件彩色衬衫,我会得到以下信息:

Client.where(shirt: "red")

但是,由于客户会有很多衬衫,我需要include?之类的东西。英语将是:给我所有穿红色衬衫的客户。你怎么写的?

c = Client.all
c.map do |m| m.shirt.include? "red" end #=> [0] true

我喜欢带回红衬衫的客户群。

1 个答案:

答案 0 :(得分:2)

你应该能够找到它:

Client.where('shirt like ?', "%#{color}%")

百分号(%)与任何内容匹配。所以你正在寻找衬衫颜色匹配的所有客户

<ANYTHING>red<ANYTHING>

现在,只要搜索字词不相互包含,这就有效。所以如果你有以下颜色

  • 红色
  • 暗红色
  • lightred

然后搜索“%red%”将产生所有三个变体。

根据您的数据库架构的外观以及您拥有的记录数量,如果您将“ShirtColors”作为单独的实体并将它们链接到客户端,则可能会更容易。

更新:

如果您的情况如上所述“红色”,“黑暗”等等,并且您希望坚持使用“短色为列”方法:

  • 在颜色之前,之间和之后添加分隔符:“,红色,蓝色,深色”,
  • 搜索:

    Client.where('衬衫喜欢?',“,#{color},”)