Orders#show中出现NoMethodError,未定义nil:NilClass的方法`Grand_Total‘

rbl8hiat  于 2022-10-15  发布在  Ruby
关注(0)|答案(2)|浏览(178)

我想要将Grand_Total显示到显示页面,我已经做了一个部分文件放入表中,在里面我想获取订单产品数据并显示在前面,但它显示了这个错误。我似乎没有定义Grand_Total方法,但不确定如何解决它。
订单控制器

class OrdersController < ApplicationController

 def supplier
  @supplier = Supplier.find(params[:id])
 end

 def outlet
  @outlet = Outlet.find(params[:id])
 end

 def index
  @orders = Order.all
 end

 def show
  @orders = Order.all
  @order_products = OrderProduct.all
 end

def new
 @order = Order.new
 @supplier = Supplier.all
 @outlet = Outlet.all
 @products = Product.all
end

def create
 @order = Order.new(order_params)
 @supplier_id = Supplier.all
 @outlet_id = Outlet.all
 if @order.save
  product_ids = params[:product_ids]
  product_ids.each do |product_id|
    OrderProduct.create(order_id: @order.id, product_id: product_id)
  end
   flash[:success] = "Succesful create!"
   redirect_to @order
 else
   render 'new'
 end
end

private

def order_params
  params.require(:order).permit(:supplier_id,:quantity, :grand_total, :order_date,
                                :delivery_date, :delivery_address, :outlet_id)
 end
end

_orderProduct.html.erb

<div class="container">
 <ul class="responsive-table">
  <li class="table-header">
   <div class="col col-1">Product</div>
   <div class="col col-2">Price</div>
   <div class="col col-4">Grand_total</div>
  </li>
  <% @order_products.each do |order_product| %>
  <li class="table-row">
   <div class="col col-1" data-label="Product"><%= order_product.product.name %></div>
   <div class="col col-2" data-label="Price"><%= order_product.product.price %></div>
   <div class="col col-4" data-label="Grand_total"><%= order_product.order.grand_total %></div>
  <% end %>
 </ul>
</div>

Show.html.erb

<% provide(:title)%>

<h2 class="dashboard">Order details</h2>

<div class="row">
 <aside class="col-md-4">
  <section class="stats">
   <%= render 'shared/stats' %>
  </section>
  <%= render 'orders/orderproduct' %>
  <div class="side">
   <button class="button-30"><%= link_to "Back to home", home_path %></button>
  </div>
 </aside>
</div>

Error show in website

vnjpjtjt

vnjpjtjt1#

在您的示例中,唯一可以调用grant_total的地方是:

<%= order_product.order.grand_total %>

错误消息告诉我们,在Orders#show中,nil:NilClass的未定义方法grand_total中存在NoMethodError。这意味着您正在对nil而不是您期望的对象类型调用grant_total。只有当order_product.order返回nil时,才会发生这种情况。这意味着您的数据库中有一个没有分配orderorder_product
有几种方法可以解决这个问题,具体取决于您想要实现的目标:

  • 添加验证,以确保所有ORDER_PRODUCTS都分配了订单。
  • 回填数据库中缺失的订单
  • 装货时不包括没有关联订单的订单产品
  • 检查是否有订单,然后才输出其拨款总额
ryhaxcpt

ryhaxcpt2#

您可以使用调试器查看哪个变量返回空值。检查并从那里开始工作。

相关问题