Подтверждение полиморфной ассоциации? - PullRequest
3 голосов
/ 07 июля 2010

Есть ли способ проверить, что полиморфная ассоциация связана только с одним элементом? например, если у меня есть полиморфные комментарии, которые могут быть на фотографиях, постах и ​​т. д., я хочу убедиться, что, если я добавляю комментарий в список комментариев постов, это, если комментарий уже связан с постом , добавить не удастся. (ошибка проверки уникальности). Есть идеи?

1 Ответ

6 голосов
/ 07 июля 2010

Итак, я думаю, у вас есть что-то вроде этого:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...