0

我有一个Item与它的has_one关系canonical_item_id。这应该返回canonical_item存在的时间。这工作正常。

has_one :canonical_item, class_name: "Item", foreign_key: :id, primary_key: :canonical_id
belongs_to :canonical_item, counter_cache: true

我尝试设置belongs_to :canonical_item, counter_cache: true更新canonical_item.items_counter计数器,但它没有更新。我还注意到,在添加时我失去了与cannonical_item

Item.last.canonical_item
=> nil

任何想法?

4

2 回答 2

1

has_one如果这是因为您和belongs_to关联的方法和/或回调相互覆盖,我不会感到惊讶。不过,您似乎不太可能同时需要两者。

如果您需要的是belongs_to关联:

create_table :items do |t|
  t.integer :canonical_item_id
end

create_table :canonical_items do |t|
  t.integer :items_count, :default => 0
end

class Item < ActiveRecord::Base
  belongs_to :canonical_items, :counter_cache => true
end

class CanonicalItem < ActiveRecord::Base
  has_many :items, :dependent => :nullify
end

如果您需要的是has_one关联,那么数据库结构本身就不允许 a 超过一个Item,因此计算关联记录CanonicalItem没有多大意义。Item您可以简单地检查是否存在:item_id.

create_table :items do |t|
end

create_table :canonical_items do |t|
  t.integer :item_id
end

class Item < ActiveRecord::Base
  has_one :canonical_item, :dependent => :nullify
end

class CanonicalItem < ActiveRecord::Base
  belongs_to :item
end
于 2013-10-27T05:18:20.053 回答
0

缓存计数器的字段items_count不是items_counter

确保该字段存在于您的数据库中。

于 2013-10-27T04:33:08.613 回答