1

これが私のコードです

class Project < ActiveRecord::Base
  has_many :actions 
end

class Action < ActiveRecord::Base
  belongs_to :project, counter_cache: true
end

ここに私のスキーマがあります:

  create_table "actions", :force => true do |t|
    t.string   "name"
    t.integer  "position",        :default => 0
    t.integer  "project_id"
    t.datetime "created_at",                     :null => false
    t.datetime "updated_at",                     :null => false
  end

  create_table "projects", :force => true do |t|
    t.string   "name"
    t.datetime "created_at",                          :null => false
    t.datetime "updated_at",                          :null => false
    t.integer  "actions_count",    :default => 0
  end

私の問題は、プロジェクトの最初のアクションが作成された後、project.actions_count が 0 のままであることです。ただし、2 番目のアクションを作成すると、1 に増加します。なぜ最初だけスキップするのでしょうか?

アクションを作成する複数の方法を試しました:

action = Action.new(params[:action_event])
action.save

action = Action.create(params[:action_event])

project = Project.find(params[:action_event][:project_id])
action = project.actions.create(params[:action_event])

何か案は?

アップデート

actions_count をインクリメントしているログの行は次のとおりです。

初め:SQL (0.5ms) UPDATE "projects" SET "actions_count" = COALESCE("actions_count", 0) + 1 WHERE "projects"."id" = 64

2番:SQL (0.3ms) UPDATE "projects" SET "actions_count" = COALESCE("actions_count", 0) + 1 WHERE "projects"."id" = 64

4

1 に答える 1