SQLException после Array.exists? (Объект) с Rails - PullRequest
0 голосов
/ 13 сентября 2010

У меня странная ошибка SQL, когда я пытаюсь узнать, находится ли объект в массиве:

@announcement = Announcement.first
puts "YAY" if current_user.announcements_read.include?(@announcement)

Ошибка:

ActiveRecord :: StatementInvalid (SQLite3 ::SQLException: неоднозначное имя столбца: create_at: ВЫБЕРИТЕ "announcements" .id FROM "Объявления" INNER JOIN "чтения" ON "Объявления" .ID = "чтения" .announcement_id ГДЕ ("объявления". "Id" = 3) И (("показания" .user_id = 1)) ORDER BY create_at DESC LIMIT 1)

(средняя таблица между users и announcements равна readings, и она отлично работает, когда я что-то делаюкак user.announcements_read.include?(announcement) в консоли)

Но работает , когда я выполняю противоположный запрос:

puts "YAY" if @announcement.read_by.include?(current_user)

Что здесь происходит?Почему первый запрос работает в консоли, а не в приложении?Почему current_user.announcements_read.include? получает ошибку SQL, а user.announcements_read нет?

Кевин

1 Ответ

0 голосов
/ 13 сентября 2010

Полагаю, announcements_read - это именованная область, с предложением :order, которое выглядит примерно как :order => "created_at".Это неоднозначно, потому что столбец created_at находится в нескольких таблицах в запросе.Исправить это должно быть просто - предложение order является фрагментом SQL, поэтому вы должны иметь возможность ставить префикс created_at с соответствующим именем таблицы.

Что касается того, почему другие методы не генерируют ошибкувозможно у вас есть разные среды?Можете ли вы посмотреть журналы, чтобы увидеть, какие запросы генерируются?

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