我有一个房屋模型和business_model []列。此列可以设置为“唤醒”,“睡眠”或“唤醒,睡眠”,带有单选按钮,所有字符串。我想让所有的房子都包括business_model,例如“清醒”。
@house = (House.all).uniq.where("business_model like ?", "sleep")
我试过那段代码。仅当列只是“睡眠”时它才有效。当它“清醒,睡觉”时,它返回零。
为什么?
答案 0 :(得分:6)
你需要在那里扔一些外卡。试试where("business_model like ?", "%sleep%")
。请注意,这也会包含sleeping
和asleep
等内容。
您可能需要考虑使用JSON数据库列,以便更好地控制查询。
答案 1 :(得分:3)
你们都乱七八糟。 House.all
将返回一个数组,这意味着.where
将出错,因为您没有在ActiveRecord::Relation
的实例上调用它。你想要:
House.where("business_model LIKE ?", "sleep").uniq
是的,你需要一张外卡让LIKE快乐。如果您不需要在属性的值中找到“sleep”,则不需要使用LIKE。
House.where("business_model LIKE ?", "sleep%").uniq
虽然.uniq
也向我跳了一下。 House
表是否包含重复项?如果是这样,那可能不是(即“不应该”)必要的。