Rails - 保存一个字段不是来自表单的对象

时间:2017-07-31 16:29:46

标签: ruby-on-rails ruby

所以这是我的问题:

我需要为订单创建一个标识符。我已经有了一个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?

2 个答案:

答案 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