我是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 %>
答案 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
。