通过嵌套属性创建用户时防止仅设计确认电子邮件

Nit*_*ain 0 ruby ruby-on-rails devise devise-confirmable

我可以选择使用嵌套属性创建用户。我只想跳过确认电子邮件。但

class ShipperOrder < ActiveRecord::Base
  belongs_to :user
  accepts_nested_attributes_for :user
end

class User < ActiveRecord::Base
  has_many :shipper_orders
end
Run Code Online (Sandbox Code Playgroud)

控制器

class ShipperOrdersController < ApplicationController
  def create
    @shipper_order = ShipperOrder.new(order_params)
    if @shipper_order.save
        flash[:notice] = "Shipper order created"
    else
        flash.now[:alert] = @shipper_order.errors.full_messages.join(", ")
        render :error
    end
  end

  private

  def order_params
    params.require(:shipper_order).permit({user_attributes: [:first_name, :email,
     :last_name,:mobile_phone, :password, :terms_of_service, :password_reset_required 
     ]}, :description)
  end
end
Run Code Online (Sandbox Code Playgroud)

现在我正在创建一个订单,如果用户想将此订单分配给数据库中不存在的用户。然后我在nested_attributes 的帮助下创建该用户。一切正常。我只想禁用此类用户的确认电子邮件。

Avd*_*ept 5

您可以添加 attr_accessor 之类的

class User < SomeClass

    attr_accessor :skip_user_confirmation

    before_save :skip_confirm


private

  def skip_confirm
    self.skip_confirmation! if self.skip_user_confirmation 
  end

end
Run Code Online (Sandbox Code Playgroud)

一般来说它应该可以工作,但你可能想稍微改变一下

然后在控制器中添加到user_attributeskey :skip_user_confirmation,这将是true or false