客户有许多不同颜色的衬衫:红色,蓝色,粉红色等。我想挑选所有穿着红色衬衫的客户。怎么样?
衬衫的存储方式如下:
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
我喜欢带回红衬衫的客户群。
答案 0 :(得分:2)
你应该能够找到它:
Client.where('shirt like ?', "%#{color}%")
百分号(%)与任何内容匹配。所以你正在寻找衬衫颜色匹配的所有客户
<ANYTHING>red<ANYTHING>
现在,只要搜索字词不相互包含,这就有效。所以如果你有以下颜色
然后搜索“%red%”将产生所有三个变体。
根据您的数据库架构的外观以及您拥有的记录数量,如果您将“ShirtColors”作为单独的实体并将它们链接到客户端,则可能会更容易。
更新:
如果您的情况如上所述“红色”,“黑暗”等等,并且您希望坚持使用“短色为列”方法:
搜索:
Client.where('衬衫喜欢?',“,#{color},”)