ActiveRecord :: RecordNotFound(无法找到带有'id'=“namegoeshere”的故事)

时间:2016-10-04 20:25:26

标签: ruby-on-rails activerecord heroku elasticsearch rails-activerecord

所以我现在已经搜索了一段时间了,到目前为止,我尝试过的许多修复程序都让我陷入了一个兔子洞。话虽这么说,我正在试着看一个我刚刚创建的故事,但是当我去查看它时,我得到了错误 “ActiveRecord :: RecordNotFound(无法找到带有'id'=”namegoeshere“的故事)”。

然后指向我的stories_controller为'show'

  def show
    @story = Story.find(params[:id])
    @responses = @story.responses.includes(:user)
    @related_stories = @story.related_stories
    if request.path != story_path(@story)
      redirect_to @story, status: 301
    end
  end

我不清楚这里会发生什么,因为我认为

   @story = Story.find(params[:id])

会列出所有故事。这是我的路线

  resources :users, only: [:show, :edit, :update] do
    resources :recommended_stories, only: [:index]
  end

  resources :stories, except: [:index] do
    resources :responses, only: [:create]
  end

此show.html.erb文件中的部分

 <div class="sidebar-top-stories">
   <ul>
     <% @dashboard.top_articles.each_with_index do |story, index| %>
       <li class="top-articles-list-item">
         <div class="count-button-wrapper">
           <span class="count-button"><%= index + 1 %></span>
         </div>
         <div class="top-articles-links">
           <%= link_to story.title, story, class: 'story-title' %><br/>
           <small>
             <%= react_component("PopoverLink", { user_id: story.user.id, url: user_path(story.user), children: story.username }) %>
           </small>
         </div>
       </li>
     <% end %>
   </ul>
 </div>

在模型故事中

  extend FriendlyId
  friendly_id :title, use: [ :slugged, :history, :finders ]

这是cmd Story.find_each(&amp;:save)的日志 logs

感谢您解决这一困境的一些帮助。

如果需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

所以错误是双重的,第一部分友好的id gem是导致我收到ActiveError消息的原因。第二部分是我在我的应用程序中使用elasticsearch,我的用户/故事不是索引。因此,每次我发布一个故事时,我的应用程序都找不到用户/故事ID(也就是友好ID),其中elasticsearch正试图找到友好ID。所以我添加了友好的方法,

def show
@story = Story.friendly.find(params[:id])
end

然后我手动为我想要搜索的每个表运行elasticsearch索引。

bundle run rake elasticsearch:import:model Class='User' Force=y

一旦完成了这两件事,一切都终于运转良好了。

值得注意的是,我在Windows平台上构建了应用程序,因此如果我在苹果或Linux上运行它,我可能不得不做更多必要的事情。