【问题标题】:ActiveRecord::RecordNotFound in StaticPagesController#homeActiveRecord::RecordNotFound 在 StaticPagesController#home
【发布时间】:2019-04-05 02:29:45
【问题描述】:

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

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

app/controllers/application_controller.rb:28:in `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

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

【问题讨论】:

    标签: ruby ruby-on-rails-3


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 1970-01-01
      • 2018-01-30
      • 2013-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多