关联模型的不明确的列名称

时间:2017-04-09 14:55:15

标签: ruby-on-rails ruby ruby-on-rails-4

我在用

查询数据库时随时收到错误消息
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%')

我已阅读其他文章但似乎没有任何作品

2 个答案:

答案 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?