2015-03-06 4 views
0

Я довольно новичок в проверке Rails. У меня есть модель Activity, которая имеет много атрибутов (перечисленные в массиве атрибутов ниже). Мне нужно проверить, что каждое действие имеет имя и хотя бы один из других атрибутов. Я думал о чем-то вроде следующего, но он выглядит немного грязным. Любой совет?Rails Custom Validation method

class Activity < ActiveRecord::Base 
    belongs_to :user 
    validate :valid_activity 

    def valid_activity 
    attributes = [reps, distance, meal, post_meal, yoga, reminder, duration] 
    if name.present? && self.include? (activity) 
    end 
    end 
end 

ответ

0

Вы бы создать новый класс валидатора как так

class ActivityValidator < ActiveModel::Validator 
    def valid_activity 
    attributes = [:reps, :distance, :meal, :post_meal, :yoga, :reminder, :duration] 
    unless name.present? && attributes.any?{ |a| self.activity == a } 
     errors[:user] << 'Need to add an activity' 
    end 
    end 

конца

Затем в файле user.rb, включают в себя модуль валидатор и использовать метод validates_with.

include ActiveModel::Validations 
validates_with ActivityValidator