gpt4 book ai didi

ruby-on-rails - 即使我在 Controller 中执行了 redirect_to,模板也丢失错误

转载 作者:行者123 更新时间:2023-12-03 14:59:04 26 4
gpt4 key购买 nike

我刚开始学习使用 Rails 进行敏捷 Web 开发的 Ruby on Rails。

做一个购物车应用程序并正在实现“空购物车”功能。

<%= button_to 'Empty cart', @cart, method: :delete,
data: { confirm: 'Are you sure?' } %>

点击“清空购物车”按钮调用购物车 Controller 中的销毁操作

# DELETE /carts/1
# DELETE /carts/1.json

def destroy
@cart = current_cart
@cart.destroy
@session[:cart_id] = nil

respond_to do |format|
format.html { redirect_to store_url, notice: 'Your cart is currently empty' }
format.json { head :no_content }
end
end

在这里我将它重定向到 store_url 但它却给我一个错误。

Template is missing Missing template carts/destroy, application/destroy with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in: * "/Users/anil20787/workspace/railsdir/depot/app/views"

这是rake routes

的输出
    Prefix Verb   URI Pattern                    Controller#Action
line_items GET /line_items(.:format) line_items#index
POST /line_items(.:format) line_items#create


new_line_item GET /line_items/new(.:format) line_items#new

edit_line_item GET /line_items/:id/edit(.:format) line_items#edit

line_item GET /line_items/:id(.:format) line_items#show
PATCH /line_items/:id(.:format) line_items#update
PUT /line_items/:id(.:format) line_items#update
DELETE /line_items/:id(.:format) line_items#destroy

carts GET /carts(.:format) carts#index
POST /carts(.:format) carts#create

new_cart GET /carts/new(.:format) carts#new

edit_cart GET /carts/:id/edit(.:format) carts#edit

cart GET /carts/:id(.:format) carts#show
PATCH /carts/:id(.:format) carts#update
PUT /carts/:id(.:format) carts#update
DELETE /carts/:id(.:format) carts#destroy

store_index GET /store/index(.:format) store#index

products GET /products(.:format) products#index
POST /products(.:format) products#create

new_product GET /products/new(.:format) products#new

edit_product GET /products/:id/edit(.:format) products#edit

product GET /products/:id(.:format) products#show
PATCH /products/:id(.:format) products#update
PUT /products/:id(.:format) products#update
DELETE /products/:id(.:format) products#destroy

store GET / store#index

我看过thisthis与我的问题类似的帖子。但我不知道需要做什么。

感谢任何解决此问题的帮助。

编辑:- 在 redirect_to 周围添加了 {}- 添加了“rake routes”输出

最佳答案

好的。我在理解工作原理时犯了一个错误,并且在遵循教程书籍时忽略了一些细节。下面是我的CartsController(部分)和错误原因

class CartsController < ApplicationController
before_action :set_cart, only: [:show, :edit, :update, :destroy]
..

# DELETE /carts/1
# DELETE /carts/1.json
def destroy
@cart = current_cart
@cart.destroy
@session[:cart_id] = nil


respond_to do |format|
format.html { redirect_to store_url, notice: 'Your cart is currently empty' }
format.json { head :no_content }
end
end

private
# Use callbacks to share common setup or constraints between actions.
def set_cart
begin
@cart = Cart.find(params[:id])
rescue ActiveRecord::RecordNotFound
logger.error "Attempt to access invalid cart #{params[:id]}"
redirect_to store_url, notice: 'Invalid cart'
else
respond_to do |format|
format.html # show.html.erb
format.json { render json: @cart }
end
end
end

# Never trust parameters from the scary internet, only allow the white list through.
def cart_params
params[:cart]
end
end

为什么会出现问题:

辅助方法“set_cart”不应在成功时自行发回响应。如果它发送响应,则根本不会执行操作操作。所以它应该尝试获取当前购物车并将其保存在@cart 实例变量中。我的 set_cart 方法实际上尝试发回响应。引发错误的正是这种响应尝试。

我的 Controller 有一个过滤器,它在销毁之前调用“set_cart”。“set_cart”方法尝试发回 HTML 响应,并在过程中搜索不存在的 destroy.html.erb View 并导致缺少 View 异常。

关于ruby-on-rails - 即使我在 Controller 中执行了 redirect_to,模板也丢失错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17541931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com