2015-12-30 9 views
1

У меня есть модель Board, которая имеет возможность принадлежать Artist, Album или BoardCategory. Я в основном хочу проверить, что, если присутствует один из трех родительских идентификаторов, остальные оставшиеся два не могут быть добавлены на плату. Будучи тем, что я проверяю несколько атрибутов, мне было интересно, как настроить сообщение error.add. Что еще более важно, как это сделать, не создавая такой длинный || условный оператор?Исключительно проверка наличия одного родительского идентификатора

class Board << ActiveRecord::Base 
    belongs_to :artist 
    belongs_to :album 
    belongs_to :board_category 

    validate :board_parent 

    private 
    def board_parent 
     if artist_id.present? || album_id.present? || board_category_id.present? 
     errors.add(..., "already belongs to an artist or album" 
     end 
    end 

ответ

0

Попробуйте это:

if [artist_id, album_id, board_category_id].reduce.length > 1 
    errors.add(:board, "Cant belong to both #{[! artist_id ||'Artist', !album_id||'Album', !board_category_id ||'Board Category'].select {|x| x != true}.join(' and ')}") 
end 
0

На основании вашего описания, я хотел бы предложить вам изменить структуру модели. polymorphic association - это то, что вам действительно нужно. Вот урок:

polymorphic association

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