多态关联验证?

时间:2010-07-06 20:48:03

标签: ruby-on-rails

有没有办法验证多态关联只与一个项目相关?例如,如果我有一个多态的评论,可以在照片,帖子等。我想确保如果我在帖子的评论列表中添加评论,如果评论已经与帖子相关联,添加将失败。 (验证唯一性错误)。有什么想法吗?

1 个答案:

答案 0 :(得分:6)

所以我猜你有这样的事情:

class Comment < ActiveRecord::Base
  belongs to commentable, :polymorphic => true
end

class Post < ActiveRecord::Base
  has_many :comments, :as => commentable, :dependent => :destroy
end

class Photo < ActiveRecord::Base
  has_many :comments, :as => commentable, :dependent => :destroy
end

假设您的Comment模型有一些属性,例如authorbody(您希望它们是唯一的),那么您可以在该模型中创建自定义验证,如下所示:< / p>

validate do |comment|
  if comment.commentable_type.constantize.comments.find_by_author_and_body(comment.author, comment.body)
    comment.errors.add_to_base "Duplicate comment added for ..."
  end
end

我还假设评论的创建方式如下:

@post.comments.create(:author => name, :body => comment_text)