Почему это: id в Rails не работает с Postgresql, но работает с MySQL? - PullRequest
2 голосов
/ 26 февраля 2011

Я использую этот метод для дружественных для поисковых систем URL в Rails - http://jroller.com/obie/entry/seo_optimization_of_urls_in

Моя модель выглядит следующим образом.

class Listing < ActiveRecord::Base
  def to_param
    "#{id}-#{title.parameterize}"
  end
end

Это работает с MySQL, но не с Postgresql.

Это ошибка, которую я получаю:

ActiveRecord :: StatementInvalid (PGError: ОШИБКА: неверный синтаксис ввода для целого числа: "16-College-Station-Apartments": SELECT * FROM "floorplans" WHERE ("floorplans". "list_id" = E'16-College-Station-Apartments ') ЗАКАЗАТЬ кровати ASC, ванны ASC, метры ASC, цена ASC):

ActiveRecord не выполняет .to_i при поискедля Postgresql?

1 Ответ

4 голосов
/ 26 февраля 2011

Rails автоматически вызовет to_i для вашего параметра для некоторых методов, в основном тех, в которых в качестве параметра ожидается целое число, например Listing.find(params[:id]).

Однако для других типовметодов поиска, которые могут принимать строки в качестве параметров, вам нужно вручную вызвать to_i

Listing.find_by_id(params[:id].to_i)
Listing.find(:conditions => ["id = ?", params[:id].to_i])

Причина, по которой у вас нет проблем с MySQL, заключается в том, что MySQL делает то, что в действительности будетto_i в его конце (то есть это не проблема адаптера базы данных, а скорее возможность реального сервера базы данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...