Rails before_update不会触发

时间:2016-06-24 09:19:41

标签: ruby-on-rails ruby-on-rails-4

我有模型Article name:string description:text number_of_comments:integer open_for_comments:boolean

如果评论超过5条,我想阻止发表评论的可能性,但不起作用。

当我创建文章open_for_comments始终是nil时。这意味着它不会触发。

有人可以帮忙吗?

这是一个代码

class Article < ActiveRecord::Base

  before_update :close_comments, if: :more_than_five_comments?

  def more_than_five_comments?
    self.number_of_comments >5 ? true : false
  end 

  def close_comments
    self.open_for_comments = false
  end
end

1 个答案:

答案 0 :(得分:1)

当您创建新文章时,open_for_comments的默认值将为零。

如果添加了迁移以将open_for_comments的默认值设置为true,则在最初创建Article时,它将设置为true而不是Nil。

我现在在这里阅读如何设置的方式是在您创建文章时发生的事情:

Article.create(name: "New Article, description: "Example description")
  -> <Article id: 1, name: "New Article", description: "Example description:, number_of_comments: nil, open_for_comments: nil > # unless within your migrations you have them set to a default value

所以,当你打电话给你的before_update时,基本上是在说nil > 5 ? true : false

迁移:

class ChangeOpenForCommentsToArticles < ActiveRecord::Migration
  def change 
    change_column :articles, :open_for_comments, :boolean, :default => true
  end

话虽如此,这并不是“顽固”的方式。如果您有评论模型,则应该使用关联。