在StaticPagesController#home中的ActiveRecord :: RecordNotFound

时间:2019-04-05 02:29:45

标签: ruby ruby-on-rails-3

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

该错误在bash中的解释如下: ActiveRecord :: RecordNotFound(找不到所有带有'id':( 17,38)的Private :: Conversations(找到0个结果,但正在寻找2个)。):

app / controllers / application_controller.rb:28:在“ opened_conversations_windows”中 我尝试过更改find​​方法,但是似乎无法使用诸如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 个答案:

答案 0 :(得分:0)

find用于在找不到给定ID的记录的情况下引发错误。

如果不想引发错误,则可以在发现单个记录时使用find_by,而在该记录不存在时返回nil。或者,您可以使用where构建查询,如果有匹配记录,该查询将始终在空数组上返回匹配记录的数组。

您可以将方法重构为:

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