Ruby on rails Rails基本搜索和PostgreSQL
我正在尝试在我的web应用程序中创建基本搜索。下面是搜索函数的代码Ruby on rails Rails基本搜索和PostgreSQL,ruby-on-rails,ruby,ruby-on-rails-3,postgresql,Ruby On Rails,Ruby,Ruby On Rails 3,Postgresql,我正在尝试在我的web应用程序中创建基本搜索。下面是搜索函数的代码 def self.search(title, category_id, city_id) if title || category_id || city_id joins(:category).where('title LIKE (?) AND category.category_id IN (?) AND city.city_id IN (?)', "%#{title}%", "%#{category_id
def self.search(title, category_id, city_id)
if title || category_id || city_id
joins(:category).where('title LIKE (?) AND category.category_id IN (?) AND city.city_id IN (?)', "%#{title}%", "%#{category_id}%", "%#{city_id}%")
else
scoped
end
end
我的模型中有以下关联:
has_one :category
has_one :city
我得到了这个错误
ActionView::Template::Error (PG::Error: ERROR: missing FROM-clause entry for ta
ble "category"
LINE 1: ..._id" = "events"."id" WHERE (title LIKE ('%%') AND category.c...
我正在使用PostgreSQL。如何删除此错误?您使用的
连接的形式需要关联名,SQL需要表名。该表应称为类别
还有几件事:
我看不到您在任何地方加入:city
,因此您的下一个错误将是“缺少表“city”的子句条目”。解决方法是加入(:city)
,并在的where
中使用cities
。但仍要继续阅读
title LIKE?
就可以了=
和单个值作为p鞋带架categories
表可能没有categories\u id
列,类似于cities
表和city\u id
列。这两列应该在模型的表中def self.search(title, category_id, city_id)
rel = scoped
rel = rel.where('title like ?', "%#{title}%") if(title)
rel = rel.where('category_id = ?', category_id) if(category_id)
rel = rel.where('city_id = ?', city_id) if(city_id)
rel
end
您甚至不需要
连接
或显式表名。+100一如既往,mu提供了一个非常优雅的解决方案,并提供了很好的解释。mucasts的时间到了!@Michaeldurrent:谢谢,但我没有“铸造”的声音。