我想为我的数据表制作一些搜索方法。但是我认为在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 ......
答案 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|
应该工作得很好。