#ruby #ruby-on-rails-3
#ruby #ruby-on-rails-3
Вопрос:
Я получаю эту ошибку всякий раз, когда пытаюсь получить доступ к приложению. Ошибка связана с контроллером приложения. Это ошибка. Не удалось найти все личные :: беседы с ‘id’: (17, 38) (найдено 0 результатов, но искал 2).
Ошибка более подробно объясняется в bash следующим образом ActiveRecord::RecordNotFound (Не удалось найти все личные :: беседы с ‘id’: (17, 38) (найдено 0 результатов, но искал 2).):
app / controllers/application_controller.rb:28:в `opened_conversations_windows’ я попытался изменить метод поиска, но, похоже, что-то не работает с такими методами, как find_by.
def opened_conversations_windows
if logged_in?
# opened conversations
session[:private_conversations] ||= []
@private_conversations_windows = Private::Conversation.includes(:recipient, :messages)
.find(session[:private_conversations])
else
@private_conversations_windows = []
end
end
Я ожидаю, что когда диалог не найден, приложение должно отображать окна с нулевым значением при входе пользователя в систему.
Ответ №1:
find
предназначен для выдачи ошибки, если запись для данного идентификатора не найдена.
Если вы не хотите вызывать ошибку, вы можете использовать, find_by
когда хотите найти одну запись или вернуть, nil
когда эта запись не существует. Или вы можете создать запрос с where
, который всегда возвращает массив совпадающих записей в пустом массиве, если есть какие-либо совпадающие записи.
Вы можете реорганизовать свой метод, чтобы:
def opened_conversations_windows
if logged_in? amp;amp; session[:private_conversations]
@private_conversations_windows = Private::Conversation
.includes(:recipient, :messages)
.where(id: session[:private_conversations])
else
@private_conversations_windows = []
end
end