Использование массива для: условия не работают с моим приложением на Heroku - PullRequest
0 голосов
/ 08 января 2012

Я только что развернул тестовое приложение на Heroku.Все работало нормально, кроме одного предложения WHERE.

В моем приложении есть плагин, который я создал сам, и он добавляет множество функций для каждой модели в моем приложении.Одной из функций является генерация строки поискового запроса, которая содержит все атрибуты модели.

Прежде чем развернуть свое приложение, я прочитал Центр разработки Heroku и обнаружил, что 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 "в приведенном выше примере) к правильному типу при создании массива поисковых запросов?

ИЛИ

Как узнать тип данных для каждого атрибута модели, чтобы я могможет ли привести к ним "запрос поиска пользователя"?

ИЛИ

Если я сгенерирую Hash вместо Array, будет ли хеш работать с "LIKE"?

...