0

単純なユーザーと住所のモデルを作成しようとしています。

ユーザーモデルにネストされたアドレスモデルを持つネストされたフォームを作成しました。私のユーザーモデルには、デバイス属性などがあります。

ユーザーの作成時に奇妙な動作が発生することを除いて、すべて正常に機能します。

以下を読むと、レコードが最初にコミットされたときに所有ユーザーのアドレスである「user_id」が入力されていることがわかります。しかし、その直後に、Deviseコアにあるように見えるものがuser_idをnullにリセットしています。

誰がこれを引き起こしているのか知っていますか?

2012-11-0322:45:20+1100に127.0.0.1のPOST"/users"を開始しました。Member::UsersController#createによるHTMLパラメーターとしての処理:{"utf8" => "✓"、 "authenticity_token" => "Pr8lSEJalWwosuaLPOrYqQ + sOkFCyoNujaUybxpZDAg ="、 "user" => {"address_attributes" => {"first_name" => "HOlley"、 "last_name" => "Hou"}、 "email"=>"HollyHou@hisense.com。 au "、" password "=>" [FILTERED] "、" password_confirmation "=>" [FILTERED] "}}新しいユーザーの作成(0.1ms)BEGIN(0.1ms)COMMIT(0.0ms)BEGIN Member :: User Exists (0.3ms)1を1つのFROMWHEREとして選択し member_usersますmember_usersemail= BINARY'hollyhou@hisense.com.au' LIMIT 1 SQL(0。 member_userscreated_atcurrent_sign_in_atcurrent_sign_in_ipemailencrypted_passwordlast_sign_in_atlast_sign_in_ipremember_created_atreset_password_sent_atreset_password_tokensign_in_countupdated_at)VALUES( '2012-11-03 11:45:20'、NULL、NULL、'hollyhou@hisense.com.au'、'$ 2a $ 10 $ 1JvC / sO85L2esNp8xA9qseTc78.rtOyF3zSBi / fOTiWJRt9.zgYha'、NULL、NULL 、NULL 、 NULL 、NULL 、0 、' 2012-11-03 11:45:20 ' )SQL (0.2ms ) INSERT INTO member_addresses(、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、_ _ _ _ _address3address_1address_2address_typebusiness_namecitycountrycreated_atfirst_namegeo_lategeo_longis_primarylast_namemiddle_namephone1phone1_typephone2phone2_typepostcodeprimary_emailsecondary_emailstatestatussuburbtitleupdated_atuser_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)UPDATE member_usersSET last_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- 0311:45:20'WHERE member_usersid= 5(0.2ms)COMMIT(0.1ms)BEGIN
(0.2ms)UPDATE member_addressesSET user_id= NULL、updated_at = '2012-11-0311:45:20'WHERE member_addressesid= 5(0.2ms)コミット

私は最終的に(これが機能するようになると)、顧客がログインした場所(この場合はチェックアウトまたはヘッダー)に応じて、登録後に2つの異なる場所にリダイレクトできる必要があるため、コントローラーはカスタムコントローラーです。

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

およびroutes.rbから

  devise_for :users, :class_name => "Member::User", :controllers => {:registrations => 'member/users', :sessions => 'member/sessions'}
4

1 に答える 1

0

私はついにこれを理解しました。これは、ネストされたフォームに関する以前の質問から得た回答に実際に関連していました。

以下のこのコードでは、以前はネストされたアドレスフィールドで、常にbuild_addressを呼び出していました。フォームが更新されたとき、アドレスは1対1の関係であるため、新しいアドレスを作成していました。今は大丈夫だと思います。テストはしていませんが、少なくともアドレス無効化の問題は解決されています。

resource_name、:url => register_path(resource_name)、:html => {:class =>'form-horizo​​ntal'})do | f | %>マークされた必須フィールド*

"alert alert-error"、:id => "flash_error")if flash [:error]%> "flash_notice")if flash [:notice]%> "alert alert-error"、:id => "flash_alert")if flash [:alert]%> {:class => "input-xlarge"}%> {:class => "input-xlarge"}%>
        <%= f.input :email, :input_html => {:class => "input-xlarge"} %>
        <%= f.input :password, :required => true, :input_html => {:class => "input-xlarge"}   %>
        <%= f.input :password_confirmation, :required => true, :input_html => {:class => "input-xlarge"} %>
        <div class="form-actions">
          <%= f.button :submit, "Register", :class => "btn btn-success btn-large" %>
        </div>
    <% end %>
于 2012-11-08T10:19:20.247 に答える