2017-01-16 48 views
0

编辑:不是"Why doesn't this query work on Heroku?"的副本。搜索不涉及字符串,只有日期查询。Rails应用程序搜索栏在本地但在Heroku上不可用

Rails应用程序在本地搜索时不会抛出错误,但每次在产品上搜索时都会抛出错误。这用于正常工作。我正在开发针对SQLite3,最近没有改变任何直接与搜索栏交互的东西。我回到了一些相当古老的分支来确保;它仍然被打破。我在1.3.9上运行了SQLite3,在我的gemfile中指定。

这里是我的模型搜索DEF:

def self.search(search) 
    where("startDay LIKE ?", "%#{search}%") 
end 

的观点:

<%= form_tag(weeks_path, :method => "get", id: "search-form") do %> 
    <h4>Search for weeks by start date </h4> 
    <%= text_field_tag :search, params[:search], placeholder: "Search Weeks", value: Date.today.beginning_of_week(:sunday) - 7 %> 
    <%= submit_tag "Search", :name => nil %> 
<% end %> 

别的我应该包括可能有助于解决这个问题?

+0

不涉及字符串,该修复是为了使搜索不区分大小写:/谢谢! – CodeBoy

回答

1

主要的不是搜索字符串或日期。问题是您的本地数据库与生产数据库不同。 PostgreSQL不能直接在日期时间字段上应用LIKE操作,它应该在使用字符串操作之前显式转换为字符串。如果不在开发环境中切换到生产类型数据库,您将会继续获得类似的错误。

where("startDay::text LIKE ?", "%#{search}%") 
+0

我知道拥有不同的开发和生产数据库不太好,但我不明白为什么现在切换可以解决问题。这个代码在几个月内没有被修改过,尽管数据库总是不一样,我以前也在工作......我会尝试你的建议,但我不清楚为什么swtiching可以解决我的问题。 – CodeBoy

+0

你并没有改变来解决问题,你正在切换以防止未来发生问题。 –

+1

Gotcha。所以这不是解决问题的办法,只是为了防止两个数据库之间的冲突。有关如何解决问题的任何想法? – CodeBoy

0

对于任何人看着这个在未来:

在PostgreSQL如下这个查询应该被写入。 我切换到postgreSQL,但由于我的应用程序已完成99%,我决定不是试图回到我的文件并更改我的所有语法,而是放弃Heroku,继续使用sqlite3,而是托管我自己的生产服务器。

相关问题