2012-01-11 1 views
0

линия в вопросе:Почему эта линия Rails 3 AREL не работает после обновления до Rails 3.1?

product_properties.includes(:property).where("properties.name = 'Label Description'").first 

Он существует в модели "продукт", который has_many: product_properties. SQL генерирует, но бросает ошибку MySQL, потому что он пытается выбрать пустой столбец:

SELECT `product_properties`.`` AS t0_r0, `product_properties`.`id` AS t0_r1, ... 

Как устранить то, что является причиной этого выберите из пустой строки?

ответ

0

Я нашел ответ. Ключ рассматривает второй столбец в инструкции SELECT выше. Это «id». Обычно это первый столбец.

«id» в этой конкретной таблице не был установлен как первичный ключ, поэтому в таблице не было первичного ключа. По-видимому, в версии 3.1 есть изменения AREL, которые заставляют Rails искать первичный ключ и возвращать пустой, когда он не найден. Это вызвало проблему. Я не знаю, является ли это ошибкой Rails или нет.

+1

Я бы подал билет на это поведение, если вы не уверены. Они закроют его, если это ожидаемое поведение. Лучше, чтобы ошибка была закрыта, чем для того, чтобы ее не сообщали, а другим людям ударить по этой проблеме. – dkubb

 Смежные вопросы

  • Нет связанных вопросов^_^