【问题标题】:Rails Devise Strange behaviour with foreign keyRails 用外键设计奇怪的行为
【发布时间】:2012-10-23 22:06:57
【问题描述】:

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

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

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

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

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

在 2012-11-03 22: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"=>"侯"}, "email"=>"HollyHou@hisense.com.au", “密码”=>“[过滤]”,“密码确认”=>“[过滤]”}} 创建新用户 (0.1ms) BEGIN (0.1ms) COMMIT (0.0ms) BEGIN Member::User Exists (0.3ms) SELECT 1 AS one FROM member_users 在哪里 member_users.email = 二进制 'hollyhou@hisense.com.au' LIMIT 1 SQL (0.2ms) INSERT INTO member_users (created_at, current_sign_in_at, current_sign_in_ip, email, 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) 值('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) 插入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, 空,空,空,空,'2012-11-03 11:45:20','霍利',空,空, 空,'侯',空,空,空,空,空,空,空,空,空,空,空, NULL, NULL, NULL, '2012-11-03 11:45:20', 5) (1.3ms) 提交
(0.1ms) 开始 (0.2ms) 更新member_users 设置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_users.id = 5 (0.2ms) 提交 (0.1ms) 开始
(0.2ms) 更新member_addresses 设置user_id = NULL, updated_at = '2012-11-03 11:45:20' 其中member_addresses.id = 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'}

【问题讨论】:

  • 您使用的是自定义控制器还是设计提供的基本控制器?
  • 自定义控制器,但现阶段的控制器只是调用“super”。我会把它贴在线程上。

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

我终于想通了。这实际上与我从之前关于嵌套形式的问题中得到的答案有关。

在下面的这段代码中,以前在嵌套地址字段中,我总是调用 build_address,因为在刷新表单时地址是一对一的关系,它正在创建一个新地址。现在觉得应该可以了,没测试过,但至少地址失效问题解决了。

资源名称,:网址 => 注册路径(资源名称),:html => {:class=> 'form-horizo​​ntal' }) 做 |f| %> 必填字段标记为 *

"alert alert-error", :id => "flash_error") if flash[:error] %> "flash_notice") 如果 flash[:notice] %> "alert alert-error", :id => "flash_alert") if flash[:alert] %> {:class=> "输入-xlarge"} %> {:class=> "输入-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 %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-15
    • 2021-10-11
    • 2013-04-23
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多