регистрация устройства с вложенными атрибутами не создает ассоциацию

У меня есть модели Пользователь и Учетная запись с ассоциацией has_one и вложенными атрибутами.
Моя проблема заключается в том, что при регистрации пользователя через Devise учетная запись не создается, и в журнале не возникает никаких ошибок. Я использую Rails 3.2 с Devise 2.0.4.

user.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"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
MONGODB (1ms) myapp_development['$cmd'].find({"count"=>"users", "query"=>{:email=>"[email protected]"}, "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"=>"[email protected]", "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

Как видите, я ничего не вижу о создании Учетной записи. Также проверено, что коллекция Account не создается при просмотре MongoDB. Что мне не хватает? Спасибо вам за вашу помощь заранее.


person taushant    schedule 21.03.2012    source источник


Ответы (1)


Проблема решена.
Мне нужно было включить :autosave

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

документы mongoid указали на проблему.

Обратите внимание, что параметр :autosave должен быть включен для реляционных ассоциаций, для которых используется accepts_nested_attributes_for, если вы не хотите вручную сохранять отношение при обновлении.

person taushant    schedule 21.03.2012