I'm trying to create a simple User & Address Model.
I've created a nested form that has an address model nested into the User model. My User Model has the devise attributes etc.
It all works fine, except that there's a strange behaviour happening when the user is created.
If you read below, you'll notice the "user_id" which is the address of the owning user is populated when the record is first committed. But then immediately afterward, something that looks like it's in Devise core, is resetting the user_id to null.
Does anyone know what would be causing this?
Started POST "/users" for 127.0.0.1 at 2012-11-03 22:45:20 +1100 Processing by Member::UsersController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"Pr8lSEJalWwosuaLPOrYqQ+sOkFCyoNujaUybxpZDAg=", "user"=>{"address_attributes"=>{"first_name"=>"HOlley", "last_name"=>"Hou"}, "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}} Creating a new user (0.1ms) BEGIN (0.1ms) COMMIT (0.0ms) BEGIN Member::User Exists (0.3ms) SELECT 1 AS one FROM
member_users
WHEREmember_users
.member_users
(created_at
,current_sign_in_at
,current_sign_in_ip
,encrypted_password
,last_sign_in_at
,last_sign_in_ip
,remember_created_at
,reset_password_sent_at
,reset_password_token
,sign_in_count
,updated_at
) VALUES ('2012-11-03 11:45:20', NULL, NULL, '[email protected]', '$2a$10$1JvC/sO85L2esNp8xA9qseTc78.rtOyF3zSBi/fOTiWJRt9.zgYha', NULL, NULL, NULL, NULL, NULL, 0, '2012-11-03 11:45:20') SQL (0.2ms) INSERT INTOmember_addresses
(address3
,address_1
,address_2
,address_type
,business_name
,city
,country
,created_at
,first_name
,geo_late
,geo_long
,is_primary
,last_name
,middle_name
,phone1
,phone1_type
,phone2
,phone2_type
,postcode
,primary_email
,secondary_email
,state
,status
,suburb
,title
,updated_at
,user_id
) VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2012-11-03 11:45:20', 'HOlley', NULL, NULL, NULL, 'Hou', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '2012-11-03 11:45:20', 5) (1.3ms) COMMIT
(0.1ms) BEGIN (0.2ms) UPDATEmember_users
SETlast_sign_in_at
= '2012-11-03 11:45:20',current_sign_in_at
= '2012-11-03 11:45:20',last_sign_in_ip
= '127.0.0.1',current_sign_in_ip
= '127.0.0.1',sign_in_count
= 1,updated_at
= '2012-11-03 11:45:20' WHEREmember_users
.id
= 5 (0.2ms) COMMIT (0.1ms) BEGIN
(0.2ms) UPDATEmember_addresses
SETuser_id
= NULL,updated_at
= '2012-11-03 11:45:20' WHEREmember_addresses
.id
= 5 (0.2ms) COMMIT
The controller is a custom controller because I eventually (once I get this working), need to be able to redirect to 2 different places after registration depending where the customer logged in from (checkout or header in this case).
class Member::UsersController < Devise::RegistrationsController
def create
super
end
def new
super
end
def edit
Rails.logger.debug { "Editing the user" }
super
end
def show
Rails.logger.debug { "Showing the user controller" }
end
end
and from routes.rb
devise_for :users, :class_name => "Member::User", :controllers => {:registrations => 'member/users', :sessions => 'member/sessions'}