Rails 3 - 搜索,HABTM和Caterogizations

时间:2013-01-08 15:21:51

标签: ruby-on-rails ruby-on-rails-3.2

我正在使用RailsCasts中的高级搜索表单(#111),但我想在子类别中使用集合复选框添加搜索的可能性。

class Category < ActiveRecord::Base
  # post_id, food_id, pet_id
class Food < ActiveRecord::Base
  # id, name
class Pet < ActiveRecord::Base
  # id, name
class Post < ActiveRecord::Base
  # id, title.

在我的search.rb模型中,我尝试过:

posts = posts.where(food_ids: food_ids) if food_ids.present?

我创建了一个名为:Subcategorysearch.rb的新模型,与Categoty.rb完全相同,但它仅用于搜索请求。里面我有:post_id,food_id,pet_id。

无论有没有新型号,我总是得到:

搜索#show中的

ActiveRecord :: StatementInvalid SQLite3 :: SQLException:没有这样的列:posts.food_ids

先谢谢。

修改

当我创建新帖子时,子类别不会出现在Post表中,而是出现在Category表中。我需要使Post搜索能够使用集合复选框子类别进行过滤。

编辑2

我尝试了很多东西,但我觉得我有点失落。

“真正的”问题是执行像Railscasts#111 - 高级搜索表单这样的搜索引擎,并使用像Railscasts#17 - HABTML Checkboxes这样的“分类”。

我需要的最终结果是,例如:搜索帖子并能够使用复选框集合过滤结果:

Post tile = My first post
Food = Name 1
Pet = Name 2

...

然后,只显示包含标题的帖子,如“我的第一个帖子”,食物如“名称1”或ID,以及相同的宠物。

再次感谢您的支持。

1 个答案:

答案 0 :(得分:1)

您在where子句键中使用food_ids而不是food_id。 从错误中可以理解,posts表没有food_ids列,它有一个food_id列。

尝试:

posts = posts.where(food_id: food_ids) if food_ids.present?