如何使用多个WHERE函数指定搜索结果?

时间:2014-11-06 13:24:43

标签: ruby-on-rails ruby

我想为我的数据表制作一些搜索方法。但是我认为在Ruby中使用这个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,&#39;类别&#39;和&#39;名称&#39;),然后使用WHERE函数来搜索具有相同&#39;类别的结果&#39;和&#39; name&#39;。

但是我有像

这样的错误

&#34; SQLite3 :: SQLException:没有这样的列:animals.animals_name:SELECT&#34; animals&#34;。* FROM&#34; animals&#34;在哪里&#34;动物&#34;。&#34; animal_category&#34; IS NULL和&#34;动物&#34;。&#34; animal_name&#34; =&#39;&#39;限制5 OFFSET 0&#34;。

(我使用了这个&#39;动物&#39;问题,因为我的原始代码中的代码太奇怪了,这让我很困惑,对不起......抱歉)

我认为问题是由于第一个WHERE函数驱动的结果。我记得&#34; WHERE函数导致&#39; array&#39;&#34;。所以我认为&#39; animals_categorized&#39;是一个由许多哈希组成的数组。所以第二个WHERE函数不起作用。(我的假设)

我该怎么做才能解决这个问题?如何更改第二个WHERE函数或者您可以建议其他方法可以搜索具有许多参数的结果?如果你能提出一些知识,我将非常感激,因为我是编程新手,我只知道Ruby,Ruby on Rails ......

1 个答案:

答案 0 :(得分: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|

应该工作得很好。