Я только что развернул тестовое приложение на 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"?