假设我有很多博客,每个博客都发布has_many
个帖子。这些存储在2个表中(“博客”和“帖子”)。是否可以在博客表中添加一个额外的列(例如scoped_id),该博客表存储由博客确定的ID。
实施例
Blog: 1
- Posts
- id: 1, scoped_id: 1
- id: 2, scoped_id: 2
- id: 3, scoped_id: 3
Blog: 2
- Posts
- id: 4, scoped_id: 1
- id: 5, scoped_id: 2
- id: 6, scoped_id: 3
我知道counter_cache可以跟踪父博客确定的帖子数量。但是,如果帖子被销毁,我不希望scoped_id
减少。
答案 0 :(得分:1)
是的,你绝对可以添加另一列,如果是我,我会做一个 before_save 回调来保存 scoped_id ,如果它是 new_record?强>
class Post < ActiveRecord::Base
...
before_save :populate_scoped_id
def populate_scoped_id
assign_the_scoped_id_method if self.new_record?
end
...
end
希望它有帮助=)
答案 1 :(得分:1)
您最好的选择是将最后使用的ID保留在博客上,并通过以下方式填写:
class Post < ActiveRecord::Base
…
before_create :populate_scoped_id
def populate_scoped_id
blog.increment!(:latest_scoped_post_id)
self[:scoped_id] = blog.latest_scoped_post_id
end
…
end
或类似的爵士乐。
如果保存失败,计数器将不会递增,因为它只是一个非常棒的交易(就像完全是企业一样)。