Как проверить модель Rails на основе параметра? - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть User модель, и мне нужно проверить атрибут номера телефона на основе параметра контроллера.

class User < ActiveRecord::Base
  validates_presence_of :phone_number
end

Эта проверка должна подтвердить phone_number в действии Create. Допустим, параметр, который я должен проверить,

 params[:phone_number]

Ответы [ 3 ]

0 голосов
/ 06 сентября 2018
validate :custom_validation, :on => :create

private
def custom_validation
   //whatever you want to check
end
0 голосов
/ 06 сентября 2018

Я пробовал много способов выполнить эту задачу,

  1. Я использовал Inheritance - создал подкласс из класса User
  2. Вызовите метод в модели из контроллера, чтобы установить атрибут и связать этот атрибут с проверкой
  3. Использовать контекстную опцию

Я полагаю, что опция контекста является наиболее надежным решением этой проблемы, с которой я столкнулся. Поэтому здесь, когда я устанавливаю контекст как: 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
0 голосов
/ 06 сентября 2018

вы можете использовать проверку до сохранения, в пользовательской модели вы можете написать

before_save :validate_phone_number
private
def validate_phome_number
   self.phone_number = /some regex/
end

В self.phone_number вы получите параметры контроллера по умолчанию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...