2013-05-08 1 views
1

Подтвердить количество созданных объектов has_many в rails 3.2?Подтвердить количество созданных объектов has_many в rails 3.2

Мне нужна специальная проверка для количества "max/min" связанного объекта. У меня есть недвижимость, которая имеет

has_many :realty_images, :dependent => :destroy 
accepts_nested_attributes_for :realty_images 

и realty_image:

class RealtyImage < ActiveRecord::Base 
    attr_accessible :avatar, :image, :realty_id 
    belongs_to :realty 

    #here a suppose I need to put some kind of custom validation 
    mount_uploader :image, ImageUploader 
end 

ответ

5

Стандартные методы проверки хорошо работают с ассоциациями:

class Ad 
    has_many :realty_images 

    # make sure there are some images 
    validates_presence_of :realty_images 

    # or make sure the number of images is in certain range 
    validates_length_of :realty_images, within: 5..10 
end 

Заканчивать documentation для более подробной информации.

+0

Большое спасибо. Я не знал о существовании такого. это отлично работает. –

+0

** @ Semyon Perepelitsa ** Не могли бы вы рассказать мне, почему это происходит [ссылка] (http://stackoverflow.com/questions/16413271/nester-attributes-for-has-many-are-not-shown-if -the-form-fail-validation?) –

+0

Конечно, я тоже ответил. Я надеюсь, что это помогает. –

3

Не уверен, если я полностью понял, но если вы пытаетесь ограничить количество realty_images данной недвижимости, и предполагая, что Риэлти .maximum содержит максимальный предел для этой данной недвижимости:

в модели RealtyImage:

class RealtyImage < ActiveRecord::Base 
    attr_accessible :avatar, :image, :realty_id 
    belongs_to :realty 

    validate :maximum_number_of_realty_images 
    mount_uploader :image, ImageUploader 

    protected 
    def maximum_number_of_realty_images 
    errors.add(:base, "Maximum reached") unless realty.realty_images.count < realty.maximum 
    end 
end 
+0

Спасибо за ваш ответ. Можете ли вы рассказать еще одну вещь, я не уверен, она «проверяет» или «проверяет» ??, и: основание означает, что ошибка будет всплывать наверху как базовая уведомление <или для определенного поля –

+0

@AndreyYasinishyn это 'validate' для регистрации пользовательского валидатора, 'validates' для Rails предопределено. Относительно ошибки, поскольку она добавляется к «базе», связана с Моделью в целом, а не для определенного атрибута; так что вы можете проверить его на realty_image.errors – Galen

+0

I gen ошибка при использовании этого подхода: realty_image.rb: 4: синтаксическая ошибка, неожиданная '(', ожидающая ключевое слово_end validate: maximum_number_of_realty_images (10) –

Смежные вопросы