Я пробовал много способов выполнить эту задачу,
- Я использовал Inheritance - создал подкласс из класса User
- Вызовите метод в модели из контроллера, чтобы установить атрибут и связать этот атрибут с проверкой
- Использовать контекстную опцию
Я полагаю, что опция контекста является наиболее надежным решением этой проблемы, с которой я столкнулся. Поэтому здесь, когда я устанавливаю контекст как: interface, проверка модели будет запускаться только на основе этого значения
Модель - User.rb
class User < ActiveRecord::Base
validates_presence_of :phone_number, on: :interface
end
Контроллер - users_controller.rb
@user = User.new(user_params)
@save_result = false
if params[:invitation_token] == nil
save_result = @user.save(context: :interface)
else
save_result = @user.save
end
Если вы используете несколько опций в ON:
validates :terms_and_conditions, acceptance: {accept: true}, on: [:create, :interface], unless: :child
validates :privacy_policy, acceptance: {accept: true}, on: [:create, :interface], unless: :child