Rails 控制器在使用 'after_create' 方法时表现得很奇怪。 - 'undefined method `errors' 对于 nil:NilClass'
Rails Controller behave weird with 'after_create' method. - 'undefined method `errors' for nil:NilClass'
我是 rails 的新手。请原谅。
我正在尝试将 'after_create' 实现到我的控制器中,以便将数据放入不同的 table 数据库中。
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
但是, 每次我尝试渲染 'new' 时,都会出现以下错误。
这些是我的完整控制器。 (排除不相关部分..)
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'?
我只希望在调用 'create' 函数时调用它们。
编辑
将订单更改为@order 未能解决问题。
@order
<> order
。所以,试试:
<%= form_with(model: @order, local: true) do |form| %>
<% if @order.errors.any? %>
...
<% end %>
<% end %>
after_action :create_order_confirm , only: [:create]
after_create 是 ActiveRecord 回调。在控制器中不可用。
我是 rails 的新手。请原谅。
我正在尝试将 'after_create' 实现到我的控制器中,以便将数据放入不同的 table 数据库中。
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
但是, 每次我尝试渲染 'new' 时,都会出现以下错误。
这些是我的完整控制器。 (排除不相关部分..)
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'? 我只希望在调用 'create' 函数时调用它们。
编辑
将订单更改为@order 未能解决问题。
@order
<> order
。所以,试试:
<%= form_with(model: @order, local: true) do |form| %>
<% if @order.errors.any? %>
...
<% end %>
<% end %>
after_action :create_order_confirm , only: [:create]
after_create 是 ActiveRecord 回调。在控制器中不可用。