在IngredientsController#destroy中的ActiveRecord :: RecordNotFound

时间:2014-02-07 16:12:55

标签: ruby-on-rails ruby-on-rails-4

我是Rails的新手。我希望任何人都可以帮助我,我相信,只要我弄清楚为什么它没有像我期望的那样工作,那就是合乎逻辑的。

我有一个实际上是wprks的destroy方法。它会破坏我想要的东西,但是我得到一个错误,即无法找到id。

提前致谢。

错误:

在IngredientsController#destroy中的ActiveRecord :: RecordNotFound 找不到id = 38

的成分

我的配料控制器:

def destroy
  @ingredient = Ingredient.find(params[:id])
  @ingredient.destroy
  flash[:notice] = @ingredient.ingredient + ' is succesvol verwijderd'
  redirect_to '/recipes/'
end

我的路线:

    Website::Application.routes.draw do

      root 'recipes#index'

      resources :recipes, only: [:destroy, :edit, :update, :create, :new, :index, :show]   
         do
       resources :ingredients
      end

      get 'ingredients/:id/destroy' => 'ingredients#destroy'
      get '/find' => 'recipes#find'

      get 'recipes/find' => 'recipes#find'
      get 'recipes/:id/destroy' => 'recipes#destroy'
      post 'recipes/:id/edit' => 'recipes#update'

      get 'recipes/edit' => 'recipes#edit'
      get 'recipes/update' => 'recipes#index'
      post 'recipes/new' => 'recipes#create'

      get 'ingredients/show' => 'ingredients#show'
      get 'ingredients/create' => 'recipes#edit'
      get 'ingredients/edit' => 'ingredients#edit'

html.erb中的代码

<table>
<th>ing_id</th>
<th>Ingredient</th>
<th>Hoeveelheid</th>
<th>Eenheid</th>
<th>recipe_id</th>
<th>delete</th>
<% @ingredient.each do |ingredients| %>

  <tr>
  <td><%= ingredients.id %></td>
  <td><%= ingredients.ingredient %></td>
  <td><%= ingredients.amount %></td>
  <td><%= ingredients.unit %></td>
  <td><%= ingredients.recipe_id %></td>
  <td><a href='/ingredients/<%= ingredients.id %>/destroy'>Delete</a></td>
  </tr>

<% end %>

4 个答案:

答案 0 :(得分:1)

由于您在调用flash之前已经销毁了@ingredient的实例,因此您的flash [:notice]无法找到要呈现的@ingredient。这样做:

flash[:notice] = @ingredient.ingredient + ' is succesvol verwijderd'
@ingredient.destroy

答案 1 :(得分:1)

这是我的重定向中的一个问题(或者老实说,也许有时候,我尝试了很多)。但最终有效的是让我的ingredients_controller看起来像这样:

  def destroy
    @ingredient = Ingredient.find(params[:id])
    @ingredient.destroy
    flash[:notice] = @ingredient.ingredient + ' is succesvol verwijderd'
    redirect_to edit_recipe_path(@recipe)
  end

答案 2 :(得分:0)

您是否检查@ingredient = Ingredient.find(params[:id])是否可用。检查params来自视图。尝试在rails控制台中使用相同的代码来验证结果和数据库内容。

答案 3 :(得分:0)

我怀疑destroy行动不是问题所在。正如您所说,它正常工作并删除资源。它看起来像是:

您正在尝试在销毁后删除已删除的Ingredient模型。这将导致ActiveRecord::RecordNotFound错误,因为destroy操作所做的第一件事就是获取资源。

您正在尝试再次删除相同的成分模型。如果您在资源的显示页面上并在销毁资源后刷新它,那么由于资源不再存在,您将获得ActiveRecord::RecordNotFound