Почему этот оператор ActiveRecord не работает на сервере, а не на консоли - PullRequest
1 голос
/ 05 августа 2011

У меня следующий запрос, который не выполняется в rails s в конкретном контроллере. Это не сбой в rails c.

Post.includes(:user).find(:all, :limit => 10, :order => 'users.display_name ASC')

В консоли возвращает правильные данные. На сервере я получаю эту ошибку

ActiveRecord::StatementInvalid: PGError: ERROR:  column posts.users.display_name does not exist
LINE 1: ...s_count" AS t0_r7, "posts"."popularity" AS t0_r8, "posts"."u...
                                                             ^

Запрос длинный, и я просто включу несколько соответствующих фрагментов

: SELECT  "posts"."id" AS t0_r0, "posts"."post_content" AS t0_r1, 
...    
"posts"."popularity" AS t0_r8, "posts"."users.display_name" AS t0_r9,
"posts"."subtopics.name" AS t0_r10, "posts"."categories.category_name" 
AS t0_r11
...
FROM "posts" LEFT OUTER JOIN "users" ON "users"."id" = "posts"."user_id" 
ORDER BY users.display_name ASC LIMIT 10

В контроллере запрос генерирует 3 дополнительных условия. Запрос помечает их как t0_r9, t0_r10 и t0_r11. Кажется, что AR добавляет это, потому что я ссылаюсь на эти конкретные столбцы в представлении этого действия контроллера. Я не понимаю, почему он это сделал, так как это цель использования includes.

1 Ответ

1 голос
/ 09 августа 2011

Таким образом, ошибка не была в коде, который я отправил.У меня был помощник, чтобы определить, какой столбец для заказа.Выглядело это примерно так:

valid_names = Post.column_names
valid_names = valid_names.concat(["users.display_name", "subtopics.name",
  "categories.category_name"])

valid_names.include?(params[:sort]) ? params[:sort] : "popularity"

Мало ли я знал, что это на самом деле объединит дополнительные термины на Post.column_names.Я исправил эту проблему, сделав копию с помощью Post.column_names.clone, и это решило проблему.

Я чувствую себя довольно глупо, совершая эту ошибку, но, надеюсь, это поможет кому-то, кто столкнулся с той же проблемой.

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