【问题标题】:undefined method `each' for nil:NilClass (RoR)nil:NilClass (RoR) 的未定义方法“each”
【发布时间】:2018-08-18 20:04:19
【问题描述】:

我正在尝试将输入到同一页面上表单正下方的表单中的值打印出来,并且我目前在运行服务器时收到一条错误消息,提示“nil:NilClass 的未定义方法‘每个’”。当我尝试在与表单相同的页面上运行循环时出现问题,如果我在不同的路径上运行循环,则没有问题。

这是循环

<tbody>
        <% @orders.each do |order| %>
          <tr>
            <td><%= order.drink %></td>
            <td><%= order.coffee_type %></td>
            <td><%= order.milk_amount %></td>
            <td><%= order.sugar_amount %></td>
            <td><%= link_to 'Show', order %></td>
            <td><%= link_to 'Edit', edit_order_path(order) %></td>
            <td><%= link_to 'Order Completed', order, method: :delete, data: { confirm: 'Are you sure?' } %></td>
          </tr>
        <% end %>
      </tbody>
    </table>

这是我的订单控制器类

class OrdersController < ApplicationController
  before_action :set_order, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_user!, except: [:index, :show]


  # GET /orders
  # GET /orders.json
  def index
    @orders = Order.all.order("created_at DESC")
    @order = Order.new
  end

  # GET /orders/1
  # GET /orders/1.json
  def show
    @orders = Order.all
  end

  # GET /orders/new
  def new
    @order = current_user.orders.build
  end

  # GET /orders/1/edit
  def edit
  end

  # POST /orders
  # POST /orders.json
  def create
    @order = current_user.orders.build(order_params)

    respond_to do |format|
      if @order.save
        format.html { redirect_to new_order_path, notice: 'Order was successfully created.' }
        format.json { render :show, status: :created, location: @order }
      else
        format.html { render :new }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

【问题讨论】:

  • 那个表格用在new?也许edit
  • 确保在视图的相应控制器操作中定义@orders = Order.all.order("created_at DESC")@orders = Order.all
  • 成功了,谢谢!

标签: html ruby-on-rails ruby


【解决方案1】:

鉴于您正在尝试呈现 Order 表单,我猜您正在使用 newedit 操作。而且,您可以执行以下操作:

@orders = Order.all.order("created_at DESC")

在这两个动作中都没有。所以,很自然,@orders 就是nil。因此,当您尝试调用 nil.each 时,您会得到“nil:NilClass 的未定义方法 `each'”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多