0

Mongoid 3、レール3.2を使用

私はこのようなクラスを持っています

class Company
  include ActiveModel::ForbiddenAttributesProtection
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Slug
  ....
end

そして、私にはこのようなオブザーバーがいます

class CompanyObserver < Mongoid::Observer

  def after_create company
     ...
  end
end

私の問題は、after_createコールバックが複数回呼び出されることです。コントローラーまたはコンソールから会社を作成すると、コールバックが2回呼び出されることがあります。オブザーバーが2回インスタンス化されていないことを確認するためにテストしました。また、before_createを使用してnew_recordをチェックしてみましたか?1回目はtrueを返し、2回目はfalseを返すので、なぜ2回目に呼び出すのかわかりません。

これが私のCompaniesコントローラーですが、モデルが更新されたときではなく、モデルが作成されたときにのみ呼び出したいので、after_createコールバックを使用したいと思います。

class CompaniesController < ApplicationController
  respond_to :html
  before_filter :set_company, only: [:edit, :update, :destroy]

  load_and_authorize_resource :company, except: [:create, :update]

  def index
    @companies = Company.all
  end

  def show
  end

  def new
    @company = Company.new
  end

  def create
    @company = Company.create(company_params)
    authorize! :create, @company
    @company.save
    respond_with(@company)
  end

  def edit
  end

  def update
    authorize! :update, @company
    @company.update_attributes(company_params)
    respond_with(@company)
  end

  def destroy
    if @company.destroy
      redirect_to root_url(subdomain: false)
    else
      redirect_to @company
    end
  end

  #######
  private
  #######

  def set_company
    @company = Company.find(params[:id])
  end

  def company_params
    params.require(:company).permit(:name)
  end

end
4

0 に答える 0