1

新しいアカウントが作成されたときの after_create コールバックとして、次のようなコードがあります。

def after_account_create
  new_account = self
  logger.info( '%%%%%%%%%%%%%%%%%%%%%     account is = ' + new_account.inspect)          
  assessment = Assessment.new :title => "Cake baking", :description => "Every day we bake fresh cakes to sell in our shop. This is our assessment of the risks involved in this process.", :account_id => new_account.id
  assessment.save!
end

これを開発環境 (Passenger / Postgres) で実行すると、正常に動作します。個人がサインアップして新しいアカウントを作成するたびに、その個人のアカウントに割り当てられた新しい評価が作成されます。

ただし、これを実稼働環境 (Heroku のシン Web サーバー) で実行すると、個人がサインアップして新しいアカウントを作成するたびに、新しい評価が作成されますが、前の個人のアカウントに割り当てられます。

2 番目の個人がアカウントを作成したときの 2 つのログの例を次に示します。

発達

%%%%%%%%%%%%%%%%%%%%%     account is = #<Account id: 97, name: "Eric Clapton", plan: "Partnership", billing_zip: nil, no_of_users: 1, no_of_assessments: nil, id_of_admin_user: 90, created_at: "2012-04-05 14:58:54", updated_at: "2012-04-05 14:58:56">
(0.2ms)  BEGIN
SQL (1.5ms)  INSERT INTO "assessments" ("account_id", "created_at", "description", "title", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["account_id", 97], ["created_at", Thu, 05 Apr 2012 10:58:56 EDT -04:00], ["description", "Every day we bake fresh cakes to sell in our shop. This is our assessment of the risks involved in this process."], ["title", "Cake baking"], ["updated_at", Thu, 05 Apr 2012 10:58:56 EDT -04:00]]

製造

%%%%%%%%%%%%%%%%%%%%%     account is = #<Account id: 2, name: "jack cale", plan: "Partnership", billing_zip: nil, no_of_users: 1, no_of_assessments: nil, id_of_admin_user: 2, created_at: "2012-04-05 14:46:54", updated_at: "2012-04-05 14:46:56">
(2.0ms)  BEGIN
SQL (2.2ms)  INSERT INTO "assessments" ("account_id", "created_at", "description", "title", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["account_id", 1], ["created_at", Thu, 05 Apr 2012 10:46:56 EDT -04:00], ["description", "Every day we bake fresh cakes to sell in our shop. This is our assessment of the risks involved in this process."], ["title", "Cake baking"], ["updated_at", Thu, 05 Apr 2012 10:46:56 EDT -04:00]]

更新:config.cache_classes開発環境でをtrueから に変更しましたfalseが、まったく同じ問題が発生しているため、間違いなくそれと関係があります。この宝石を使用して、オブジェクトの作成を現在のアカウントのみに限定しています https://github.com/ErwinM/acts_as_tenantこれは、リクエスト間でキャッシュされているものでしょうか?

UPDATE2: 実際、まさにこれでした。セッション間で current_tenant 値がキャッシュされていました。新しく作成されたアカウントに対してアカウントが作成されるたびに current_tenant 値を定義するメソッドを accounts_controller に追加する必要がありました。

4

0 に答える 0