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