Rails中的自定义验证

时间:2012-05-04 05:51:56

标签: ruby-on-rails ruby-on-rails-3

我有一个帖子has_many评论关联。 Post有布尔属性published。 如果post.published为false,则新评论不应有效。 完成此类验证的最佳做法是什么?

我试图通过这种方式做到这一点,但遗憾的是,它无法正常工作。仍然可以为未发布的帖子创建新评论。

class Comment < ActiveRecord::Base
  validates :post_id, presence: true, if: :post_is_published

  ...
  def post_is_publised
    post && post.published
  end
end

1 个答案:

答案 0 :(得分:1)

嗯..我认为您的代码中存在语法错误...试试这个:

class Comment < ActiveRecord::Base
  validates :post_id, :presence => true, :if => :post_is_published

  def post_is_publised
    post.try(:published)
  end
end

阅读完您的控制台输出并再次检查您的问题后:

class Comment < ActiveRecord::Base
  validate :post_has_to_be_published

  def post_has_to_be_published
    unless post.try(:published)
      self.errors.add(:base, "you can add comments only to published posts")
    end
  end
end

据我所知,您不希望允许在未发布的帖子中添加评论。上面的代码应该可以实现。