我在用
查询数据库时随时收到错误消息hotels = Hotel.joins(:area).where("title LIKE ? OR address LIKE ? OR area.title LIKE ?", "%#{keywords}%", "%#{keywords}%", "%#{keywords}%") if keywords.present?
我得到的错误是
SQLite3 :: SQLException:模糊列名:title:SELECT COUNT(*)FROM" hotels" INNER JOIN"地区" ON" area"。" id" ="酒店"。" area_id"在哪里(标题喜欢'%a%'或地址喜欢'%a%' OR area.title LIKE'%a%')
我已阅读其他文章但似乎没有任何作品
答案 0 :(得分:2)
您必须指定要查找的表格,就像您在上一个LIKE
语句中所做的那样,您需要在title
列中指定area
列。 1}}表
OR area.title LIKE ?
也许你在两个表中都有你在查询中使用的名为title
的列,这样SQLite就不知道在哪个表中查找和运行查询。
您已经在使用area.title
但不是hotel.title
,所以可能存在问题,请尝试以这种方式进行查询。
Hotel.joins(:area).where('hotel.title LIKE ? OR address LIKE ? OR area.title LIKE ?', "%#{keywords}%", "%#{keywords}%", "%#{keywords}%") if keywords.present?
=> SELECT "hotels".* FROM "hotels" INNER JOIN "areas" ON "areas"."id" = "hotels"."area_id" WHERE (hotel.title LIKE '%area-title-0%' OR address LIKE '%area-title-0%' OR area.title LIKE '%area-title-0%')
=> #<Hotel::ActiveRecord_Relation:0x3fcd4355198c>
答案 1 :(得分:0)
我通过将Hotel.title的列名更改为Hotel.name并加入(:area)(单数)来实现它,因为它属于Association然后使用areas.title(复数),因为它是一个表名称
hotels = Hotel.joins(:area).where("name LIKE ? OR address LIKE ? OR areas.title LIKE ?", "%#{keywords}%", "%#{keywords}%", "%#{keywords}%") if keywords.present?