搜索表单不在生产中

时间:2011-10-03 14:49:25

标签: ruby-on-rails ruby ruby-on-rails-3 forms search

由于某些原因,当我的应用程序启动时,我的搜索表单无法正常工作,在本地主机中它的工作没有问题但是当我在启动的应用程序上使用搜索时,搜索似乎被打破了。我无法弄清楚为什么,我按照Railscasts简单搜索表单来实现它,它在本地根本不是问题。

我的用户模型类似于

   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 个答案:

答案 0 :(得分:3)

我假设您正在使用MySQL进行开发,而heroku的PostgreSQL用于生产。通常这样的错误可能是由于生产和开发数据库环境的差异造成的。

问题可能是声明

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

将其更改为此

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

注意ILIKE。

始终最好在开发和生产中使用相同的数据库,因为这样可以防止以后出现问题。另请查看heroku docs here。如果你使用heroku希望它有所帮助

答案 1 :(得分:0)

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