Похоже, у вас есть два типа книг. не уверен, что логика вашего домена, но нормальный поток я бы ничего не делал.
class Book < ActiveRecord::Base
end
Тогда для пути, который вы хотите дополнительной проверки, вы можете сделать это:
class SpecialBook < Book
validates :town, :presence => true
end
Если это так, вы можете рассмотреть возможность наследования одной таблицы.
В другом случае вам может понадобиться сохранить student_id в книге.
Тогда
class Book < ActiveRecord::Base
validate :validate_town
private
def validate_town
if student_id
self.errors.add(:town, "This book is evil, it needs a town.") if town.blank?
end
end
end