Rails - как проверить наличие атрибута ПОСЛЕ создания
На моей странице регистрации устройства я реализовал функцию отслеживания IP-адресов, которая, когда пользователь регистрируется, отправляет страну, из которой он пришел, для заполнения атрибута вновь созданной учетной записи. user_country
,
Я хотел бы знать, возможно ли реализовать своего рода проверку на -user_country так же, как и для других атрибутов пользователя (email
, password
...) когда пользователь создан, для реализации своего рода проверки на user_country
чтобы быть уверенным, что он не пустой и не нулевой, то есть пользователь всегда должен идентифицировать страну.
Я не могу использовать классический способ с validates :user_country, presence: true
потому что, когда пользователь создан user_country
еще не заполнен, но ЖДЕТ, что RegistrationController делает вызов геокодеру таким образом => см. метод в нижней части, называемый after_sign_up_path_for
/app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController
layout 'lightbox'
def update
account_update_params = devise_parameter_sanitizer.sanitize(:account_update)
# required for settings form to submit when password is left blank
if account_update_params[:password].blank?
account_update_params.delete("password")
account_update_params.delete("password_confirmation")
end
@user = User.find(current_user.id)
if @user.update(account_update_params) # Rails 4 .update introduced with same effect as .update_attributes
set_flash_message :notice, :updated
# Sign in the user bypassing validation in case his password changed
sign_in @user, :bypass => true
redirect_to after_update_path_for(@user)
else
render "edit"
end
end
# for Rails 4 Strong Parameters
def resource_params
params.require(:user).permit(:email, :password, :password_confirmation, :current_password, :user_country)
end
private :resource_params
protected
def after_sign_up_path_for(resource)
resource.update(user_country: set_location_by_ip_lookup.country) #use concerns/CountrySetter loaded by ApplicationController
root_path
end
end
Есть ли способ реализовать своего рода "проверку" в такой ситуации?
1 ответ
Я понимаю, что вы хотите User
модель для проверки user_country
поле, но только во время шагов после первоначального создания?
class User
validates_presence_of :user_country, on: :update
end
будет проверяться только при обновлении, а не при создании. Смотрите http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_presence_of для других вариантов, которые вы можете добавить.
Но для вашего случая использования кажется странным, что вам нужно сделать это в контроллере после регистрации. Я думаю, что имеет больше смысла всегда проверять user_country
затем введите атрибут при создании пользователя в контроллере.