2014-11-06 115 views
0

我想为我的数据表制作一些搜索方法。但是我认为在Ruby中使用这个WHERE函数时我不知道一些关键点。如何使用多个WHERE函数指定搜索结果?

# app/controllers/search_controller.rb 
def posts 
category = params[:searched_category] 
name = params[:searched_name] 
    animals_categorized = Animal.where(animal_category: category) 
    animals_result = animals_categorized.where(animal_name: name) 
end 

# app/views/search/posts.html.erb 
<% @animals_result.each do |animal| %> 
    <p><%= animal.weight %></p> 
<% end %> 

# db/migrate/001_create_animals.rb 
t.string :animal_category 
t.string :animal_name 
t.integer :animal_weight 

我的工作几乎是这样的代码。我得到了多个参数(在这种情况下,我写了2,'category'和'name'),然后使用WHERE函数来搜索具有相同'category'和'name'的结果。

但是我有一个像

错误 “的SQLite3 ::的SQLException:没有这样的列:animals.animals_name:选择 ”兽兽 “WHERE ”动物animal_category “IS NULL和” 动物“ * FROM。”“。” “。”animal_name“=''LIMIT 5 OFFSET 0”。

(我用这个“动物”的问题,因为我在我的原代码过于离奇的代码,可以让我困惑问什么......对不起)

我认为这个问题是因为从第一个WHERE函数驱动的结果。我记得“WHERE函数产生'数组'”。所以我认为'animals_categorized'是一个由许多散列组成的数组。 (我的假设)

我能做些什么来解决这个问题?我怎样才能改变第二个WHERE函数,或者你能否建议其他方法可以用多个参数来搜索结果?这将是非常感激,如果你可以建议一些知识,因为我在编程所以新手,我只知道红宝石,Ruby on Rails的....

+0

你能发布完整的错误吗?只是'SQLite3 :: SQLException:没有这样的列'不会帮助任何人在这里了解什么是缺少的。另外,你确定动物表中存在'animal_category'和'animal_name'列吗? – Surya 2014-11-06 13:31:24

+0

你的意思是几乎像这样的代码?您可以将多个参数传递到 – 2014-11-06 13:34:23

+0

谢谢@ User089247。这些列存在于表中。当我使用一个参数,它运作良好,但两个参数使错误... – 2014-11-06 13:48:36

回答

0
@animals = Animal.all 
@animals = @animals.where(animal_category: params[:searched_category]) if params[:searched_category].present? 
@animals = @animals.where(animal_name: params[:searched_name]) if params[:searched_name].present? 

,并鉴于

@animals.each do |animal| 

应该工作得很好。

+0

谢谢你的回答。但是,当我根据您的答案更改我的代码时,我仍然收到该错误消息.....我想我错过了其他一点。你认为上面的代码中存在什么问题? – 2014-11-06 13:58:16

+0

然后问题不在于where函数,而是数据库本身。你的'动物'表有'animal_category'和'animal_name'列吗? – Kasperi 2014-11-06 14:14:31

+0

哦,上帝,,,,,我输入我的原代码犯了可怕的错误....我真的很抱歉,你们所有....并感谢您的帮助,我学会了如何让'如果conditon标记'后面的WHERE功能。非常感谢你!! – 2014-11-06 14:21:43