使用Array for:条件无法在Heroku上使用我的应用程序

时间:2012-01-08 13:30:44

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

我刚刚在Heroku上部署了我的测试应用程序。除了WHERE子句之外,一切都运行正常。

我的应用程序有一个我自己创建的插件,它为我的应用程序中的每个模型添加了许多功能。一个功能是搜索查询字符串生成,其中包含所有模型属性。

在部署我的应用程序之前,我阅读了Heroku Dev Center并发现PostgreSQL对数据类型敏感。他们建议每个人从使用字符串:条件更改为数组。然后我修改我的插件

def search_conditions(search)
    @search_columns = Array.new
    self.column_names.each do |column|
      @search_columns << "#{self.table_name}.#{column}"
    end

    search_statement = Array.new
    search_conditions = Array.new
    @search_columns.uniq.reject(&:blank? || :nil?).each do |column_name|
      search_statement << "#{column_name} LIKE ?"
    end
    search_statement = search_statement.join(" OR ")
    search_conditions << search_statement
    @search_columns.uniq.reject(&:blank? || :nil?).each do |column_name|
      search_conditions << "%#{search}%"
    end
    search_conditions
end

我在本地测试我的修改过的插件,它像往常一样工作正常。

> search_condition = User.search_condition("John")
> search_condition
 => ["user.id LIKE ? OR user.name LIKE ? OR user.password LIKE ? OR user.type LIKE ?",
 "John", "John", "John", "John"]
> user = User.where(search_condition).find(:all, ...)
 => Bunch of user data were returned

但是当我将我的应用程序部署到Heroku时,我试图避免的问题仍然存在。

ActiveRecord::StatementInvalid (PGError: ERROR:  operator does not exist: integer ~~ unknown)

所以,我的问题是

如何在不生成搜索查询数组的情况下将每个“用户搜索查询”(我的意思是“上面示例中的”john“)转换为正确的类型来解决此问题?

OR

如何知道每个模型属性的数据类型,以便我可以为他们投射“用户搜索查询”?

OR

如果我生成Hash而不是Array,哈希是否可以使用“LIKE”?

0 个答案:

没有答案