所以这是我的问题:
我需要为订单创建一个标识符。我已经有了一个ID字段,但他们想根据创建订单的日期和时间创建一个标识符。
我创建了迁移,并添加了标识符没有问题,但我需要在控制器创建方法中生成此标识符并保存顺序。像这样:
def create
identifier = generate_identifier
@order = Order.new(order_params, identifier)
if @order.save
OrderMailer.confirm_order_email(@order, current_user).deliver
else
flash[:errors] = @order.errors.full_messages
errors_user_logged?
end
end
如何使用order_params以及生成的标识符调用Order.new?
答案 0 :(得分:2)
您可能希望将其移至模型层。这似乎不是控制器的关注点。您可以在模型中定义一个或两个方法,并使用before_create
回调来执行此操作。它也应该使测试更容易。
class Order < ActiveRecord::Base
before_create :set_identifier
private
def set_identifier
self.identifier = generate_identifier
end
def generate_identifier
# code to generate the identifier
end
end
答案 1 :(得分:0)
如何在identifier
中插入params
如下?
def create
params[:order][:identifier] = generate_identifier
@order = Order.new(order_params)
if @order.save
OrderMailer.confirm_order_email(@order, current_user).deliver
else
flash[:errors] = @order.errors.full_messages
errors_user_logged?
end
end
def order_params
params.require(:order).permit(:something, :something, :identifier)
end