Как проверить пароль на основании условия? - PullRequest
0 голосов
/ 10 февраля 2020

Я хочу, чтобы пароль был обязательным только для веб-регистрации, а не для регистрации мобильного приложения. Мой код проверки приведен ниже:

  class User < ApplicationRecord
    validate :password_for_web
    validate :password_confirmation_for_web

  def password_for_web
    if  !app_user && password.blank? 
    errors.add(:password, "can't be blank.")
  end
end

 def password_confirmation_for_web
   if  !app_user && password != self.password_confirmation=
       errors.add(:password_confirmation, "doesn't match.")
   end
 end

 end

Проверка работает правильно, но в случае регистрации мобильного приложения все равно требуется пароль. Помощь по этому вопросу была бы полезна.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Вы можете использовать опции if: и unless: для переключения валидации:

class User < ApplicationRecord
  validates :password, presence: true, confirmation: true, unless: :app_user?
  # or 
  validates :password, presence: true, confirmation: true, if: :web_user?

  # TODO implement app_user?
end

Вы можете передать символ (имя метода) или лямбду.

0 голосов
/ 10 февраля 2020

Если вы используете простое приложение rails с адаптивным дизайном.

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

Пользовательский путь:

В application_helper.rb:

def mobile_device
  agent = request.user_agent
  return "tablet" if agent =~ /(tablet|ipad)|(android(?!.*mobile))/i
  return "mobile" if agent =~ /Mobile/
  return "desktop"
end

Затем вы можете использовать его в своих представлениях:

<% if mobile_device == "mobile" %>
    //add extra parameter to check in model
    <% form_tag :mobile_device, true %>
<% end %>

В вашей модели:

class User < ApplicationRecord
  validate :password_for_web, if: :mobile_device?
  validate :password_confirmation_for_web, if: :mobile_device?

  def password_for_web
    if  !app_user && password.blank? 
        errors.add(:password, "can't be blank.")
    end
  end

  def password_confirmation_for_web
    if  !app_user && password != self.password_confirmation=
    errors.add(:password_confirmation, "doesn't match.")
    end
  end

  def mobile_device?
    mobile_device.present?
  end
end

Вы также можете использовать драгоценные камни для проверки мобильного устройства, например:

https://github.com/fnando/browser

https://github.com/shenoudab/active_device

Если у вас есть отдельное мобильное приложение.

Добавьте дополнительный параметр в форму регистрации для мобильного приложения, как я использовал на мой взгляд с именем mobile_device. Используйте обновленный код модели, и все готово.

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