ActiveRecord - find_by v / s где - PullRequest
       0

ActiveRecord - find_by v / s где

0 голосов
/ 08 января 2011

В чем разница между конструкциями рельсов:

authentication = Authentication.where(:provider=>omniauth['provider'], :uid=>omniauth['uid'])
authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])

Мои проблемы в том, что если я использую первую конструкцию (.where) - я не могу получить ассоциацию. Моя модель Аутентификация принадлежит модели. Если я ищу Аутентификацию, используя первую конструкцию, я не могу получить связанного Пользователя через: authentication.user, но то же самое работает со второй версией.

Я хочу использовать первую конструкцию вместо второй из-за проблемы с Heroku: http://docs.heroku.com/database: PGError: ERROR: оператор не существует: изменение символа = целое число.

Ответы [ 2 ]

1 голос
/ 08 января 2011

Репост хороший ответ из комментариев:

возможно, вызовите .to_s для omniauth ['uid'], чтобы рельсы думали, что это строка, и передали ее postgres как varchar?

1 голос
/ 08 января 2011

PGError: ОШИБКА: оператор не существует: символ меняется = целое число.

Это не проблема геройки.Postgresql начиная с 8.4 или 8.3 ввел более строгую проверку типов.Например, если ваш столбец "position" является целым числом, вы не можете написать этот sql:

select * from orders where position = '1';

Он вернет ошибку, похожую на вашу.*

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