Имя класса находится в столбце _type
, например, в следующей настройке:
class Comment
belongs_to :commentable, :polymorphic => true
end
class Post
has_many :comments, :as => :commentable
end
класс комментариев будет иметь поля commentable_id
и commentable_type
.commentable_type
- это имя класса, а commentable_id
- это внешний ключ.Если вы хотите проверить через комментарий для пост-специфических комментариев, вы можете сделать что-то вроде этого:
validate :post_comments_are_long_enough
def post_comments_are_long_enough
if self.commentable_type == "Post" && self.body.size < 10
@errors.add_to_base "Comment should be 10 characters"
end
end
ИЛИ, и я думаю, что мне нравится это лучше:
validates_length_of :body, :mimimum => 10, :if => :is_post?
def is_post?
self.commentable_type == "Post"
end
если у вас есть несколько проверок, я бы порекомендовал этот синтаксис:
with_options :if => :is_post? do |o|
o.validates_length_of :body, :minimum => 10
o.validates_length_of :body, :maximum => 100
end