我有模型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
答案 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
话虽如此,这并不是“顽固”的方式。如果您有评论模型,则应该使用关联。