搜索表单在生产环境中无法正常工作。

3

我的搜索表单在应用程序启动时出现问题,但在本地主机上却没有任何问题。当我尝试在启动的应用程序上使用搜索时,似乎无法正常工作。我不知道为什么,我按照Railscasts Simple Search Form的实现方式进行了操作,在本地完全没有问题。

我的用户模型如下:

   def self.search(search)
     if search
       find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
     else
       find(:all)
     end
   end

我的用户控制器索引看起来像这样

   def index
     @users = User.search(params[:search])
     @title = "All Users"

     respond_to do |format|
       format.html
       format.json { render :json => @users }
     end
   end

我的用户索引视图
 <% form_tag users_path, :method => 'get' do %>
   <p>
     <%= text_field_tag :search, params[:search] %>
     <%= submit_tag "Search", :name => nil %>
   </p>
 <% end %>

 <ul class="users">
   <%= render @users %>
 </ul>

问题不仅在于搜索功能不能正常工作,而且当我输入一个不存在的名字时,它应该显示所有用户,但实际上却返回了一个空页面。不确定这是否相关,但我想尽可能详细地说明问题。谢谢。

2个回答

3
我假定您在开发中使用MySQL,而在Heroku的生产环境中使用PostgreSQL。通常这种错误是由生产和开发数据库环境之间的差异引起的。
问题可能出在这个语句上。
find(:all, :conditions => ['name LIKE ?', "%#{search}%"])

将其更改为这个

find(:all, :conditions => ['name ILIKE ?', "%#{search}%"])

注意使用 ILIKE。

在开发和生产中最好使用相同的数据库,这样可以避免以后出现问题。如果您正在使用 Heroku,请查看此处的 Heroku 文档 here。希望能有所帮助。


工作得非常完美,谢谢。只是出于好奇,你们是怎么知道我在使用Heroku的?是因为PostgreSQL类型错误吗? - Michael Peralta
@Michael 很高兴能帮忙,我以前也遇到过类似的问题,你的问题有类似的症状,这就是我猜你在使用Heroku的原因。 - Hishalv

0
你是使用托管提供商还是在本地服务器上运行应用程序的“生产”模式?如果你正在使用Heroku,Heroku使用Postgres可以处理不同的SQL查询。为了测试,你可以在开发环境中设置Postgres并检查查询结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接