Rails - 带有counter_cache的模型不起作用

时间:2013-05-03 15:54:23

标签: ruby-on-rails model counter

什么人?

我在项目中创建了一个迁移,将“likes_count”列添加到Post:

  def self.up
    add_column :posts, :likes_count, :integer, :default => 0
    Post.all().each do |post|
        post.update_attribute(:likes_count, post.likes.count)
          post.save         
    end
  end

  def self.down
    remove_column :posts, :likes_count
  end

嗯,看起来很有效,但是当我尝试在我的模型中添加“counter_cache”时,我遇到了麻烦。看:

has_many :likes, :counter_cache => true, :as => :important

是的,我在没有“:counter_cache => true”的情况下运行迁移,只有在此迁移之后才添加此命令。奇怪的是,如果我做了像

这样的事情
has_many :likes, :as => :important,  #:counter_cache => true

我的localhost再次运作。 (我只得到错误:“我们很抱歉,但出了点问题。”)。

有人知道发生了什么事吗?

1 个答案:

答案 0 :(得分:3)

我发现了问题。

has_many不能有“:counter_cache”参数,此参数仅适用于“belongs_to”。

我去模仿“喜欢”并在“belongs_to”中插入“counter_cache”:

belongs_to :post, :counter_cache => :likes_count

关于“has_many:likes”,我离开了它的方式:

has_many :likes, :as => :important

谢谢你们......