知道如何进一步重构它
Any idea how I can refactor this any further
我是 rails 的新手,我真的尽了最大努力来重构这个方法,但这是我能做到的最小的方法。关于我可以提取或重构什么的任何想法?等等
def create
if verify_recaptcha
super do |resource|
if resource.save
pin = resource.create_pin(otp: new_otp)
begin
SendMessage.new({pin: pin.otp, contact_number: resource.contact_number, first_name: resource.first_name}).send_otp
rescue Exceptions::ServiceDownError
sign_in(resource)
return redirect_to users_otp_verification_path(user: @user.uuid, service_status: true)
end
sign_in(resource)
return redirect_to users_otp_verification_path(user: @user.uuid)
else
return render :new, resource: resource
end
end
else
flash.now[:alert] = 'There was an error with the recaptcha verification. Please verify that you are human.'
flash.delete :recaptcha_error
return render :new, resource: build_resource(hash = nil)
end
end
开始你可以做:
def create
if verify_recaptcha
super do |resource|
return render :new, resource: resource unless resource.save
begin
SendMessage.new({pin: resource.create_pin(otp: new_otp).otp, contact_number: resource.contact_number, first_name: resource.first_name}).send_otp
rescue Exceptions::ServiceDownError
sign_in(resource)
return redirect_to users_otp_verification_path(user: @user.uuid, service_status: true)
end
sign_in(resource)
return redirect_to users_otp_verification_path(user: @user.uuid)
end
else
flash.now[:alert] = 'There was an error with the recaptcha verification. Please verify that you are human.'
flash.delete :recaptcha_error
return render :new, resource: build_resource(hash = nil)
end
end
我不知道 'service_status: true' 在 ServiceDownError 中意味着什么...但我想你可以这样做:
def create
if verify_recaptcha
super do |resource|
return render :new, resource: resource unless resource.save
begin
SendMessage.new({pin: resource.create_pin(otp: new_otp).otp, contact_number: resource.contact_number, first_name: resource.first_name}).send_otp
ensure
sign_in(resource)
return redirect_to users_otp_verification_path(user: @user.uuid, service_status: true)
end
end
else
flash.now[:alert] = 'There was an error with the recaptcha verification. Please verify that you are human.'
flash.delete :recaptcha_error
return render :new, resource: build_resource(hash = nil)
end
end
或者也许:
def create
if verify_recaptcha
super do |resource|
return render :new, resource: resource unless resource.save
status = nil
begin
SendMessage.new({pin: resource.create_pin(otp: new_otp).otp, contact_number: resource.contact_number, first_name: resource.first_name}).send_otp
rescue Exceptions::ServiceDownError
status = true
ensure
sign_in(resource)
return redirect_to users_otp_verification_path(user: @user.uuid, status: status)
end
end
else
flash.now[:alert] = 'There was an error with the recaptcha verification. Please verify that you are human.'
flash.delete :recaptcha_error
return render :new, resource: build_resource(hash = nil)
end
end
要更进一步,您可以使用单独的方法提取它:
{pin: resource.create_pin(otp: new_otp).otp, contact_number: resource.contact_number, first_name: resource.first_name}
喜欢:
private
def message_params(resource)
{
pin: resource.create_pin(otp: new_otp).otp,
contact_number: resource.contact_number,
first_name: resource.first_name
}
end
请记住,重构不仅仅是让代码变小,还要让它更简洁、更易于阅读,因此将内容提取到更小的方法中可能是个好主意
我是 rails 的新手,我真的尽了最大努力来重构这个方法,但这是我能做到的最小的方法。关于我可以提取或重构什么的任何想法?等等
def create
if verify_recaptcha
super do |resource|
if resource.save
pin = resource.create_pin(otp: new_otp)
begin
SendMessage.new({pin: pin.otp, contact_number: resource.contact_number, first_name: resource.first_name}).send_otp
rescue Exceptions::ServiceDownError
sign_in(resource)
return redirect_to users_otp_verification_path(user: @user.uuid, service_status: true)
end
sign_in(resource)
return redirect_to users_otp_verification_path(user: @user.uuid)
else
return render :new, resource: resource
end
end
else
flash.now[:alert] = 'There was an error with the recaptcha verification. Please verify that you are human.'
flash.delete :recaptcha_error
return render :new, resource: build_resource(hash = nil)
end
end
开始你可以做:
def create
if verify_recaptcha
super do |resource|
return render :new, resource: resource unless resource.save
begin
SendMessage.new({pin: resource.create_pin(otp: new_otp).otp, contact_number: resource.contact_number, first_name: resource.first_name}).send_otp
rescue Exceptions::ServiceDownError
sign_in(resource)
return redirect_to users_otp_verification_path(user: @user.uuid, service_status: true)
end
sign_in(resource)
return redirect_to users_otp_verification_path(user: @user.uuid)
end
else
flash.now[:alert] = 'There was an error with the recaptcha verification. Please verify that you are human.'
flash.delete :recaptcha_error
return render :new, resource: build_resource(hash = nil)
end
end
我不知道 'service_status: true' 在 ServiceDownError 中意味着什么...但我想你可以这样做:
def create
if verify_recaptcha
super do |resource|
return render :new, resource: resource unless resource.save
begin
SendMessage.new({pin: resource.create_pin(otp: new_otp).otp, contact_number: resource.contact_number, first_name: resource.first_name}).send_otp
ensure
sign_in(resource)
return redirect_to users_otp_verification_path(user: @user.uuid, service_status: true)
end
end
else
flash.now[:alert] = 'There was an error with the recaptcha verification. Please verify that you are human.'
flash.delete :recaptcha_error
return render :new, resource: build_resource(hash = nil)
end
end
或者也许:
def create
if verify_recaptcha
super do |resource|
return render :new, resource: resource unless resource.save
status = nil
begin
SendMessage.new({pin: resource.create_pin(otp: new_otp).otp, contact_number: resource.contact_number, first_name: resource.first_name}).send_otp
rescue Exceptions::ServiceDownError
status = true
ensure
sign_in(resource)
return redirect_to users_otp_verification_path(user: @user.uuid, status: status)
end
end
else
flash.now[:alert] = 'There was an error with the recaptcha verification. Please verify that you are human.'
flash.delete :recaptcha_error
return render :new, resource: build_resource(hash = nil)
end
end
要更进一步,您可以使用单独的方法提取它:
{pin: resource.create_pin(otp: new_otp).otp, contact_number: resource.contact_number, first_name: resource.first_name}
喜欢:
private
def message_params(resource)
{
pin: resource.create_pin(otp: new_otp).otp,
contact_number: resource.contact_number,
first_name: resource.first_name
}
end
请记住,重构不仅仅是让代码变小,还要让它更简洁、更易于阅读,因此将内容提取到更小的方法中可能是个好主意