I would like to register my user information in db by registering as a new member of the wizard method.
We are currently creating a personal development application.
We are trying to achieve user registration using the wizard form using the device.
Page 1: Profile image, name, etc.
Page 2: Address (including automatic address entry
)
Page 3: Completion Page
Before I created another model, I was able to register without any problems, but
After the creation and association implementation of other models, it is no longer saved in db.
(We also install carrierwave, so it's not clear where it's no longer possible.)
There were no specific error statements, so when I changed from save to save!, I received the following error statement:
Also, the console is ROLLBACK as shown below.
[registrations_Controller.rb]
Device controller for wizard-driven forms.
#frozen_string_literal:true
class Users::RegistrationsController <Device::RegistrationsController
# before_action: configure_sign_up_params, only: [:create]
# before_action: configure_account_update_params, only: [:update]
def new
@user=User.new
end
def create
@user=User.new(sign_up_params)
[email protected] lid?
flash.now [:alert] = @user.errors.full_messages
render:new and return
end
session["device.register_data"] = {user:@user.attributes}
session["device.register_data"][:user]["password"]=params[:user][:password]
@[email protected]_address
render —new_address
end
def create_address
@user=User.new(session["device.register_data"]["user"])
@address=Address.new(address_params)
[email protected] lid?
flash.now [:alert] = @address.errors.full_messages
render —new_address and return
end
@user.build_address(@address.attributes)
@user.save!
session["device.register_data"]["user"].clear
sign_in(:user,@user)
end
# GET/resource/edit
# default
# super
# end
# PUT/resource
# default update
# super
# end
# DELETE/resource
# def destroy
# super
# end
# GET/resource/cancel
# Forces the session data which is userally expired after sign
# in to be expired now. This is useful if the user wants to
# cancel oauth signing in/up in the middle of the process,
# removing all OAuth session data.
# def cancel
# super
# end
# protected
# If you have extra params to permit, append them to the sanitizer.
# def configure_sign_up_params
# device_parameter_sanitizer.permit(:sign_up, keys:[:attribute])
# end
# If you have extra params to permit, append them to the sanitizer.
# def configure_account_update_params
# device_parameter_sanitizer.permit(:account_update, keys:[:attribute])
# end
# The path used after sign up.
# after_sign_up_path_for (resource)
# super(resource)
# end
# The path used after sign up for inactive accounts.
# after_inactive_sign_up_path_for (resource)
# super(resource)
# end
protected
default address_params
params.require(:address).permit(:zipcode,:prefect_code,:city,:district,:building,:room)
end
end
[Application_controller.rb]
class ApplicationController<ActionController::Base
protect_from_forgery with: —Exception
before_action: configure_permitted_parameters, if: —device_controller?
after_sign_in_path_for (resource)
posts_path
end
after_sign_out_path_for (resource)
root_path
end
protected
def configure_permitted_parameters
device_parameter_sanitizer.permit(:sign_up, keys:[:nickname,:first_name,:last_name,:first_name,:first_name_kana,:last_name_kana,:birthday,:image])
end
end
[user.rb]
class User<ApplicationRecord
# Include default device modules.Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
device:database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable
values:nickname, :first_name, :last_name, :first_name_kana, :last_name_kana, :birthday, :image,presence:true
has_one —address
has_many —posts
has_many —messages
has_many:group_users,dependent::destroy
has_many:groups,through::group_users,dependent::destroy
include JpPrefecture
jp_prefecture:prefecture_code
mount_uploader: image, ImageUploader
defect_name
JpPrefecture::Prefecture.find(code:prefecture_code).try(:name)
end
def perfect_name = (prefect_name)
self.prefecture_code = JpPrefecture::Prefecture.find(name:prefecture_name).code
end
end
[address.rb]
class Address <ApplicationRecord
belongs_to:user, optional:true
values:zipcode,:prefecture_code,:city,:distribute,presence:true
mount_uploader: image, ImageUploader
end
■ Model
·Is the association not correct?
Other models associated with the user model are address, post, group, and message.
I checked if the relationship between has_many(one) and Belong to is well described in each
·Nil for foreign key not allowed?
Belong_to followed by optional:true
·Is the image not correctly taken over to the second page (address registration)?
I don't know if it's correct, but add mount_uploader: image, ImageUploader to address.rb
■ Controller
·Is the image not saved because Validation failed: Image can't be blank?
Verify that the image is listed in the device_parameter_sanitizer of the application_controller
·Add に@address.user=current_user under @address=Address.new(address_params)
It was a question that was asked elsewhere, and it was an answer, so I also tried it.
This is my first time using stack overflow.
I would appreciate it if you could let me know if there is anything difficult to understand how to ask.
Thank you for your cooperation.
image
has failed, so it appears that the image uploaded in carrierwave and not yet saved has not been successfully taken over via session.
Since image_cache
is required as well as image_cache
to handle images that are not saved across HTTP requests in carrierwave, shouldn't @user.image_cache
also be saved in session
? (I've only used image_cache
to set hidden in validation error, and there was no immediate environment, so it may not be @user.image_cache
.)
register_data
is better than register_data
although it is not directly related to the error.
https://labs.cybozu.co.jp/blog/akky/2005/07/regist/
© 2024 OneMinuteCode. All rights reserved.