【问题标题】:Heroku Search Broken - Rails 3.1Heroku 搜索损坏 - Rails 3.1
【发布时间】:2011-11-12 03:05:09
【问题描述】:

我最近将一个 Rails 3.1 应用程序推送到 heroku。在本地,一切正常,但在实时应用中,搜索功能已损坏。

型号:

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 的事实有关。

感谢任何帮助。 :)

【问题讨论】:

    标签: ruby-on-rails-3 postgresql sqlite heroku


    【解决方案1】:

    请注意,类似 Postgres 的匹配是区分大小写的。尝试使用ILIKE 而不是LIKE

    【讨论】:

    • 这重申了我的一个口头禅 - 针对您将部署到的同一个数据库平台进行开发!或者至少在部署之前对其进行测试。
    • 非常感谢您的建议 :) 成功了,您会推荐任何特定的 gems 以获得更高级的搜索功能吗?
    • 如果您需要搜索多个字段和大量记录,He​​roku 支持Websolr,根据我的经验,这非常有效。
    【解决方案2】:

    这里有两个问题:

    1. PostgreSQL LIKE 关键字与 SQLite 中的 LIKE 不同。 SQLite 中的 LIKE 在 PostgreSQL 中是 ILIKE。使用正确的关键字或小写比较。

    2. 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
      

    【讨论】:

      【解决方案3】:

      您可以使用Texticle gem。它非常易于安装并且与 Heroku 完美配合,但您需要使用 PostgreSQL。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-12
        • 1970-01-01
        • 2019-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-08
        相关资源
        最近更新 更多