ActiveRecord::RecordNotFound 在 StaticPages Controller#home

ActiveRecord::RecordNotFound in StaticPagesController#home

每当我尝试访问该应用程序时都会收到此错误。该错误与应用程序控制器有关。这是错误。 找不到所有 Private::Conversations 'id': (17, 38)(找到 0 个结果,但正在寻找 2 个)。

错误在bash中有更多解释如下 ActiveRecord::RecordNotFound(无法找到 'id' 的所有 Private::Conversations:(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

我希望当没有找到对话时,应用程序应该在用户登录时呈现 nil 对话 windows。

find 旨在在找不到给定 ID 的记录时引发错误。

如果您不想引发错误,则可以在要查找单个记录时使用 find_by,或者在该记录不存在时使用 return nil。或者您可以使用 where 构建一个查询,如果有任何匹配记录,该查询总是 return 一个空数组上的匹配记录数组。

您可以将您的方法重构为:

def opened_conversations_windows
  if logged_in? && session[:private_conversations]
    @private_conversations_windows = Private::Conversation
                                       .includes(:recipient, :messages)
                                       .where(id: session[:private_conversations])
  else
    @private_conversations_windows = []
  end
end