部署到heroku(Ruby on Rails)时的搜索栏inop



我正在尝试计算我的第一个搜索栏,但我开始在我的 heroku 部署和本地主机上进行测试之间感到困惑。

我让它在本地主机上正常工作,但是当它部署用于生产时,它不再工作,这是我来自 Heroku 日志的错误:

ActionView::Template::Error (PG::UndefinedFunction: ERROR:  operator does not exist: integer ~~* unknown

搜索栏表单:

<%= form_tag(tools_path, :method => "get", id: "search-form") do %>
<%= text_field_tag :search, params[:search], placeholder: "Search Tools" %>
<%= submit_tag "Search", :name => nil %>
<% end %>

我的显示器应该重定向到所述搜索词的索引

我的控制器如下所示:

def index
@tools = Tool.paginate(params[:page], :per_page => 50)
if params[:search]
@tools = Tool.search(params[:search]).paginate(page: params[:page], per_page: 50)
else
@tools = Tool.paginate(params[:page], :per_page => 50)
end
end

我做了一些研究,但我真正想到的是 PG 可能无法搜索整数,这可以解释为什么在使用 sqlite 开发时它可以工作,但我不明白为什么这会完全破坏搜索栏,即使我的搜索词是一个简单的字符串。 我也知道使用两个不同的数据库通常不是你会做的事情。这个应用程序最初是基于本地服务器的,但是在数据库已经构建之后,用户决定他们不喜欢这个想法...... 注意我忘了复制我的模型:

class Tool < ApplicationRecord
def self.search(search)
where("prefix ILIKE ? OR basic ILIKE ? OR global ILIKE ? OR suffix ILIKE ?", "%#{search}%", "%#{search}%", "%#{search}%", "%#{search}%")
end 
end

在视图中使用实例变量而不是参数:

在控制器中:

def index
@search_term = params[:search].to_s
if params[:search]
@tools = Tool.search(params[:search]).paginate(page: params[:page], per_page: 50)
else
@tools = Tool.paginate(params[:page], :per_page => 50)
end
end

在视野中

<%= form_tag(tools_path, :method => "get", id: "search-form") do %>
<%= text_field_tag :search, @search_term, placeholder: "Search Tools" %>
<%= submit_tag "Search", :name => nil %>
<% end %>

最新更新