Применить проверку только к одному объекту - Rails 3 - PullRequest
0 голосов
/ 23 сентября 2010

Допустим, у меня есть класс Comment, который является полиморфным, и я использую его во многих местах в системе.

class Comment true

И есть одно место, в котором я хотел бы применить проверку к длине контента Комментария.Как мне подойти к этой проблеме?

1) Используйте STI и добавьте новую валидацию в подкласс - я чувствую, что это излишнее 2) Расширение этого единственного объекта, создаваемого / обновляемого в контроллере, с необходимостью валидации.Но как этого добиться, не расширяя при этом своего класса?

1 Ответ

0 голосов
/ 24 сентября 2010

Вы можете попытаться сделать это (стиль Rails 2.3, так как я еще не пробовал Rails 3, но я полагаю, что решение довольно похоже):

class Comment < ActiveRecord::Base
  belongs_to :commentable, :polymorphic => true
  attr_accessor :content

  attr_accessor :should_validate_comment_length

  validates_length_of :content, :maximum => 100, :if => :should_validate_comment_length
end

Затем в месте, гдепроверка должна быть активной, вы можете сделать:

def create
   @comment = #somehow obtain a comment model instance (like from POST)
   @comment.should_validate_comment_length = true
   if @comment.valid?
      ...
end

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...