-2

我是Rails的新手。请原谅。

我正在尝试在我的控制器中实现“after_create”,以便将数据放入数据库中的不同表中。

after_create :create_order_confirm  

它会调用这个。

def create_order_confirm
    my_order_confirm = OrderConfirm.new(:order_id => @order.id.to_s)
    my_order_confirm.save
end

但是,每次我尝试渲染“新”时,都会出现以下错误。 在此处输入图像描述

这些是我的完整控制器。(排除不相关部分..)

class OrdersController < ApplicationController
  before_action :set_order, only: [:show, :edit, :update, :destroy]
  after_create :create_order_confirm

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

  # GET /orders/1
  # GET /orders/1.json
  def show
    render "show"
  end

  # GET /orders/new
  def new # Error -> happen.
    @order = Order.new
  end

  ...
  ...



  private
    # Use callbacks to share common setup or constraints between actions.
    def set_order
      @order = Order.find(params[:id])
    end

    def create_order_confirm
        my_order_confirm = OrderConfirm.new(:order_id => @order.id.to_s)
        my_order_confirm.save
    end
end

看来我的新方法没有被调用。

@order = Order.new

如果我删除 'after_create :create_order_confirm' 这一行。它工作正常。有人能解释一下吗?以及如何使用“after_create”?我只希望在调用“创建”函数时调用它们。

编辑

将 order 更改为 @order 并没有解决问题。

在此处输入图像描述

4

2 回答 2

1

@order<> order。所以,试试:

<%= form_with(model: @order, local: true) do |form| %>
  <% if @order.errors.any? %>
    ...
  <% end %>
<% end %>
于 2019-11-01T18:10:28.707 回答
1
after_action :create_order_confirm , only: [:create]

after_create 是 ActiveRecord 回调。在控制器中不可用。

于 2019-11-01T19:31:03.913 回答