0

我正在尝试创建一个简单的用户和地址模型。

我创建了一个嵌套表单,其中包含一个嵌套在 User 模型中的地址模型。我的用户模型具有设计属性等。

一切正常,除了创建用户时发生了奇怪的行为。

如果您阅读下面的内容,您会注意到首次提交记录时填充了拥有用户的地址的“user_id”。但是紧接着,看起来像是在 Devise 核心中的东西,正在将 user_id 重置为 null。

有谁知道这是什么原因造成的?

在 2012-11-03 22:45:20 +1100 开始 POST "/users" for 127.0.0.1 由 Member::UsersController#create as 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.3 毫秒)从member_usersWHERE中选择 1 作为一个 member_usersemail= BINARY 'hollyhou@hisense.com.au' 限制 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_count, updated_at) 值 ('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( 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)值(NULL,NULL,NULL,NULL,NULL,NULL,NULL,'2012-11-03 11:45:20','Holley',NULL,NULL,NULL,'侯',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- 03 11:45:20' 在哪里 member_usersid= 5 (0.2ms) COMMIT (0.1ms) BEGIN
(0.2ms) UPDATE member_addressesSET user_id= NULL, updated_at = '2012-11-03 11: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 并且因为在刷新表单时地址是一对一的关系,它正在创建一个新地址。现在我觉得应该可以了,我没有测试过,但至少地址无效问题解决了。

resource_name,:url => registration_path(resource_name), :html => {:class => 'form-horizo​​ntal' }) 做 |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 回答