在我之前创建的控制器中查找的搜索功能
Search function that looks within my previously created controller
我认为这是一个简单的问题,但我找不到它。
我一直关注this guide做一个搜索功能。本教程实际上使用 SQL 而我使用的是 PostgreSQL,但我认为这没有任何区别。
我希望它在我的 PlantTable
数据库中搜索 Plant_ID
,而不是在 Store
数据库中查找 name
。
这是教程显示的内容:
#app/controllers/page_controller.rb
def index
end
def search
if params[:search].blank?
redirect_to(root_path, alert: "Empty field!") and return
else
@parameter = params[:search].downcase
@results = Store.all.where("lower(name) LIKE :search", search: @parameter)
end
end
end
但我实际上将它添加到我的家庭控制器中
这是我最后的尝试
#app/controllers/home_controller.rb
class HomeController < ApplicationController
def index
end
def search
@plant_tables = PlantTable.all
#So I can get PlantTable from a different controller
if params[:search].blank?
redirect_to(root_path, alert: "Empty field!") and return
else
@parameter = params[:search].downcase
@results = @plant_tables.all.where("Plant_ID LIKE :search", search: @parameter)
#I removed lower() because my Plant_ID is written like this.
end
end
end
向我的 routes.rb
添加了代码:
get '/search' => 'pages#search', :as => 'search_page'
但是在我的 app/views/home/search.html.erb
...
<h3>Search Result</h3>
<% @results.each do |result| %>
<%= result.name %><br>
<% end %>
...我收到以下错误:
ActiveRecord::StatementInvalid in Home#search
PG::UndefinedColumn: ERROR: column "plant_id" does not exist
LINE 1: ...ELECT "plant_tables".* FROM "plant_tables" WHERE (Plant_ID L...
^
HINT: Perhaps you meant to reference the column "plant_tables.Plant_ID".
由于列名的特殊情况,您必须将其用引号引起来并将其转换为文本以执行 LIKE 查询:
PlantTable.where('"Plant_ID" LIKE ?', @parameter)
通知;
- 将列名用单引号括起来,
where
的参数将不起作用。
- 您可以删除链接在
@results
上的第二个 all
。
我认为这是一个简单的问题,但我找不到它。 我一直关注this guide做一个搜索功能。本教程实际上使用 SQL 而我使用的是 PostgreSQL,但我认为这没有任何区别。
我希望它在我的 PlantTable
数据库中搜索 Plant_ID
,而不是在 Store
数据库中查找 name
。
这是教程显示的内容:
#app/controllers/page_controller.rb
def index
end
def search
if params[:search].blank?
redirect_to(root_path, alert: "Empty field!") and return
else
@parameter = params[:search].downcase
@results = Store.all.where("lower(name) LIKE :search", search: @parameter)
end
end
end
但我实际上将它添加到我的家庭控制器中 这是我最后的尝试
#app/controllers/home_controller.rb
class HomeController < ApplicationController
def index
end
def search
@plant_tables = PlantTable.all
#So I can get PlantTable from a different controller
if params[:search].blank?
redirect_to(root_path, alert: "Empty field!") and return
else
@parameter = params[:search].downcase
@results = @plant_tables.all.where("Plant_ID LIKE :search", search: @parameter)
#I removed lower() because my Plant_ID is written like this.
end
end
end
向我的 routes.rb
添加了代码:
get '/search' => 'pages#search', :as => 'search_page'
但是在我的 app/views/home/search.html.erb
...
<h3>Search Result</h3>
<% @results.each do |result| %>
<%= result.name %><br>
<% end %>
...我收到以下错误:
ActiveRecord::StatementInvalid in Home#search
PG::UndefinedColumn: ERROR: column "plant_id" does not exist
LINE 1: ...ELECT "plant_tables".* FROM "plant_tables" WHERE (Plant_ID L...
^
HINT: Perhaps you meant to reference the column "plant_tables.Plant_ID".
由于列名的特殊情况,您必须将其用引号引起来并将其转换为文本以执行 LIKE 查询:
PlantTable.where('"Plant_ID" LIKE ?', @parameter)
通知;
- 将列名用单引号括起来,
where
的参数将不起作用。 - 您可以删除链接在
@results
上的第二个all
。