Итак, я думаю, у вас есть что-то вроде этого:
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
имеет пару атрибутов, таких как author
и body
(которые вы хотите быть уникальными), вы можете создать пользовательскую проверку в этой модели, например:
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)