Ruby on rails 3 Heroku搜索中断-Rails 3.1

Ruby on rails 3 Heroku搜索中断-Rails 3.1,ruby-on-rails-3,postgresql,sqlite,heroku,Ruby On Rails 3,Postgresql,Sqlite,Heroku,我最近向heroku推出了Rails 3.1应用程序。在本地,一切正常,但在live应用程序中,搜索功能被破坏 型号: def self.search(search) if search find(:all, :conditions => ['name LIKE ?', "%#{search}%"]) else find(:all) end <%= form_tag apps_path, :method => 'get', :id => "s

我最近向heroku推出了Rails 3.1应用程序。在本地,一切正常,但在live应用程序中,搜索功能被破坏

型号:

def self.search(search)
  if search
    find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
  else
    find(:all)
  end
<%= form_tag apps_path, :method => 'get', :id => "search" do %>
   <%= text_field_tag :search, params[:search] %>
   <%= submit_tag "Search", :name => nil, :class => "search-button" %>
<% end %>
def index
    @apps = App.search(params[:search])
    @number_of_apps = @apps.count
end
结束

查看:

def self.search(search)
  if search
    find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
  else
    find(:all)
  end
<%= form_tag apps_path, :method => 'get', :id => "search" do %>
   <%= text_field_tag :search, params[:search] %>
   <%= submit_tag "Search", :name => nil, :class => "search-button" %>
<% end %>
def index
    @apps = App.search(params[:search])
    @number_of_apps = @apps.count
end
我觉得这与我的本地安装程序运行在SQLite3上,而Heroku安装程序使用PostgreSQL有关


感谢您的帮助。:)

请注意,类似Postgres的匹配是区分大小写的。尝试使用
ILIKE
而不是
LIKE
请注意,类似Postgres的匹配区分大小写。尝试使用
ILIKE
而不是
LIKE
这里有两个问题:

  • PostgreSQL
    LIKE
    关键字与SQLite中的
    LIKE
    不同LIKE在PostgreSQL中是
    ILIKE
    。要么使用正确的关键字,要么对比较进行降级

  • find(:all)
    从2.3版开始就被弃用,应该在3.1版中删除。请使用
    #all
    方法

    def self.search(query)
      if query
        where('name LIKE ?', "%#{query}%").all
      else
        all
      end
    end
    
    更好的是,返回一个作用域以利用延迟加载

    def self.search(query)
      if query
        where('name LIKE ?', "%#{query}%")
      else
        self
      end
    end
    

  • 这里有两个问题:

  • PostgreSQL
    LIKE
    关键字与SQLite中的
    LIKE
    不同LIKE在PostgreSQL中是
    ILIKE
    。要么使用正确的关键字,要么对比较进行降级

  • find(:all)
    从2.3版开始就被弃用,应该在3.1版中删除。请使用
    #all
    方法

    def self.search(query)
      if query
        where('name LIKE ?', "%#{query}%").all
      else
        all
      end
    end
    
    更好的是,返回一个作用域以利用延迟加载

    def self.search(query)
      if query
        where('name LIKE ?', "%#{query}%")
      else
        self
      end
    end
    

  • 你可以用这个。它的安装非常简单,并且与Heroku一起工作非常出色,但是您需要使用PostgreSQL。

    您可以使用。它的安装非常简单,并且与Heroku配合使用效果非常好,但是您需要使用PostgreSQL。

    这再次重申了我的一条箴言——针对您将要部署到的同一个DB平台进行开发!或者至少在部署之前对其进行测试。非常感谢您的建议:)它起作用了,您会推荐任何特定的gems来实现更高级的搜索功能吗?您应该看看是否需要搜索多个字段和大量记录,Heroku支持,以我的经验,非常有效。这重申了我的一个咒语——针对您将要部署到的同一个DB平台进行开发!或者至少在部署之前对其进行测试。非常感谢您的建议:)它起作用了,您会推荐任何特定的gems来实现更高级的搜索功能吗?您应该看看是否需要搜索多个字段和大量记录,Heroku支持,根据我的经验,这是非常有效的。