1

У меня есть медиасервер, написанный на рельсах, который позволяет пользователям загружать изображения и классифицировать их. Теперь я делаю функциональность планшета, что довольно сложно.Проверять несколько вложенных атрибутов связанных моделей для равенства перед сохранением

Для начала у нас есть модель Template. Это Template модель has_many TemplateBlocks. A TemplateBlock имеет следующие характеристики: width, height, top, left и position. Они выбраны так, чтобы упростить создание кода css и pdf. Таблица TemplateBlock также содержит столбец для template_id.

Далее мы имеем Moodboard который HAS_MANY Documents через MoodboardImages

class Moodboard < ActiveRecord::Base 

    has_many :documents, through: :moodboard_images 
    has_many :moodboard_images, dependent: :destroy 

    accepts_nested_attributes_for :moodboard_images 

end 

Таблица MoodboardImages содержит еще один столбец, являющийся template_block_id для определения положения в Template

Как теперь все работает отлично, но Мне нужна проверка на создание MoodboardImage. При сохранении Moodboard с вложенными атрибутами для MoodboardImages должно быть ограничение на MoodboardImage за то же самое template_id. a Moodboard, очевидно, не может содержать несколько шаблонов.

Мой вопрос к вам, ребята, как я могу выполнить эту проверку как можно более аккуратную?

Я могу, конечно, написать метод, который захватывает TemplateBlock из базы данных и временно хранит и сравнивает его before_save или что-то, но это не очень. Мне было интересно, есть ли «хороший» или «хороший» способ сделать это.

+0

Как ваш 'модель Moodboard' выглядеть? Вы можете добавить проверки там, нет? – sebkkom

+2

Модель Moodboard не является специальной, она имеет только столбец имен. Соотношения делают панель настроения, и я могу добавить проверку в модели Moodboard, но ей нужно запросить шаблон 'MoodBoardImage' шаблона_block_id, чтобы убедиться, что у шаблона_блоков все одинаковое template_id. –

ответ

0

Проверка будет выглядеть

validates :template_id, :uniqueness => {:scope => :moodboard_id} 

См rails guides

+1

.' Template_id' не живет на ' MoodBoardImage', идентификатор шаблона должен быть получен из связанного с ним 'TemplateBlock', поэтому для того, чтобы это работало, рельсы должны запрашивать базу данных для соответствующего блока, который я думаю? –

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