gpt4 book ai didi

ruby-on-rails - 设计具有嵌套属性的注册不会创建关联

转载 作者:行者123 更新时间:2023-12-04 06:34:58 25 4
gpt4 key购买 nike

我有一个UserAccount 模型,具有has_one 关联和嵌套属性。
我的问题是,当通过 Devise 注册用户时,不会创建帐户并且在日志中不会生成错误。我将 Rails 3.2 与 Devise 2.0.4 结合使用。

用户.rb

class User
include Mongoid::Document

has_one :account, :inverse_of => :user

accepts_nested_attributes_for :account

field :name
validates_presence_of :name
validates_uniqueness_of :name, :email, :case_sensitive => false
attr_accessible :name, :email, :password, :password_confirmation, :remember_me, :account_attributes

devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
...
end

account.rb

class Account
include Mongoid::Document

belongs_to :user, :inverse_of => :account

field :name

validates_presence_of :user
attr_accessible :name, :user_id

end

registration_controller.rb

class RegistrationsController < Devise::RegistrationsController
def new
resource = build_resource({})
resource.build_account
respond_with resource
end
end

查看

<h2>Sign up</h2>

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>

<%= f.fields_for :account do |account_form| %>
<div><%= account_form.label 'Company' %>
<%= account_form.text_field :name %></div>
<% end %>
...

这是我的控制台输出

Started POST "/users" for 127.0.0.1 at 2012-03-21 03:40:55 -0700
Processing by RegistrationsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"dAmJrthe/IjlHzjBI2kF9nkTxwIWM0o69Q1PI2nd95o=", "user"=>{"account_attributes"=>{"name"=>"comp11"}, "name"=>"user11", "email"=>"uu3@u3.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
MONGODB (1ms) myapp_development['$cmd'].find({"count"=>"users", "query"=>{:email=>"uu3@u3.com"}, "fields"=>nil}).limit(-1)
MONGODB (0ms) myapp_development['$cmd'].find({"count"=>"users", "query"=>{:name=>/^user11$/i}, "fields"=>nil}).limit(-1)
MONGODB (0ms) myapp_development['$cmd'].find({"count"=>"users", "query"=>{:email=>/^uu3@u3\.com$/i}, "fields"=>nil}).limit(-1)
MONGODB (1ms) myapp_development['users'].insert([{"email"=>"uu3@u3.com", "encrypted_password"=>"$2a$10$lY6aHKTyeVALAcIkX.Ipke5YMj7/viU9Hy5s.jsQAq7cfCBtJtXaO", "sign_in_count"=>0, "_id"=>BSON::ObjectId('4f69b0377e3d3639bf000008'), "name"=>"user11"}])
MONGODB (0ms) myapp_development['users'].update({"_id"=>BSON::ObjectId('4f69b0377e3d3639bf000008')}, {"$set"=>{"last_sign_in_at"=>2012-03-21 10:40:56 UTC, "current_sign_in_at"=>2012-03-21 10:40:56 UTC, "last_sign_in_ip"=>"127.0.0.1", "current_sign_in_ip"=>"127.0.0.1", "sign_in_count"=>1}})
Redirected to http://localhost:3000/
Completed 302 Found in 257ms

如您所见,我没有看到有关创建帐户的任何信息。还通过查看 MongoDB 验证没有创建 Account 集合。我错过了什么?提前感谢您的帮助。

最佳答案

解决了问题。
我需要打开 :autosave

has_one :account, :inverse_of => :user, :autosave => true

mongoid docs指出了问题。

Note that the :autosave option needs to be enabled for relational associations that accepts_nested_attributes_for is used for if you don't want to manually save the relation on update.

关于ruby-on-rails - 设计具有嵌套属性的注册不会创建关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9803090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com