2011-01-23 2 views
1

У меня возникли проблемы с созданием вложенной формы регистрации для пользователей, использующих аутентификацию устройства. Форма создает нового владельца, но не создает нового пользователя.Вставить форму регистрации вложенных пользователей

Вот мои модели:

User.rb

class User < ActiveRecord::Base 
    has_one :worker 
    has_one :owner 
end 

Owner.rb

class Owner < ActiveRecord::Base 
    belongs_to :user 
    accepts_nested_attributes_for :user 
    attr_accessible :name, :website, :user_attributes, :user 
end 

Часть контроллера Владелец:

class OwnersController < ApplicationController 

    def show 
    @owner = Owner.find(params[:id]) 
    end 

    def new 
    @owner = Owner.new 
    end 

    def create 
    @owner = Owner.create(params[:owner]) 
    if @owner.save 
    flash[:notice] = "Owner created" 
    redirect_to(:action => 'list') 
    else 
    render('new') 
    end 
    end 

end 

И мой Владелец Форма:

<%= link_to("<< Back to List", {:action => 'list'}, :class => 'back-link') %> 

<div class="subject new"> 
    <h2>Create owner</h2> 

    <%= form_for(:owner, :url => {:action => 'create'}, :html => {:multipart => true}) do |f| %> 
    </tr> 
    <th>Name:</th> 
    <td><%= f.text_field(:name) %></td> 
    </tr> 
    </tr> 
    <th>Website:</th> 
    <td><%= f.text_field(:website) %></td> 
    </tr> 
    <%= fields_for :user do |form| %> 
     <%= form.text_field(:email) %> 
     <%= form.password_field(:password) %> 
     <%= form.password_field(:password_confirmation) %> 
    <% end %> 

    <div class="form-buttons"> 
     <%= submit_tag("Creat owner") %> 
    </div> 

    <% end %> 
</div> 

Мой журнал развития

Started POST "/owners" for XXXXXX at 2011-01-23 21:16:59 +0100 
    Processing by OwnersController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"gA07ajItgkADpZ/rF5NM73AncUDWgb0Q2QJjXvMCSFY=", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "owner"=>{"name"=>"asdas", "website"=>"www.test.com", "commit"=>"Create owner"} 
    [1m[36mSQL (0.0ms)[0m [1mBEGIN[0m 
    [1m[35mSQL (0.0ms)[0m describe `owners` 
    [1m[36mAREL (0.0ms)[0m [1mINSERT INTO `owners` (`name`, `website`, `created_at`, `updated_at`, `user_id`) VALUES ('asdas', 'www.test.com','2011-01-23 20:17:00', '2011-01-23 20:17:00', NULL)[0m 
    [1m[35mSQL (125.0ms)[0m COMMIT 
    [1m[36mSQL (0.0ms)[0m [1mBEGIN[0m 
    [1m[35mSQL (0.0ms)[0m COMMIT 
Redirected to http://localhost:3000/owners/list 
Completed 302 Found in 344ms 

Мой новый журнал развития:

Started POST "/owners" for 127.0.0.1 at 2011-01-24 16:41:02 +0100 
    Processing by OwnersController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"0TcWhIoUt9Qwrst8Zrj5tycd8LZ1VWdQ98YUSBWb9f4=", "owner"=>{"name"=>"sdfsdrfwrf", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}}, "commit"=>"Create owner"} 
Completed in 375ms 

ActiveRecord::AssociationTypeMismatch (User(#18210216) expected, got ActiveSupport::HashWithIndifferentAccess(#9451968)): 
    app/controllers/owners_controller.rb:22:in `create' 

Rendered C:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.0.3/lib/action_dispatch/middleware/templates/rescues/_trace.erb (15.6ms) 
Rendered C:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.0.3/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (2062.5ms) 
Rendered C:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.0.3/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (2125.0ms) 

ответ

1

Кажется, что вам нужно

<%= f.fields_for :user do |form| %> 

где у вас есть

<%= fields_for :user do |form| %> 

(оригинальный ответ)

вы имели в виду, чтобы иметь

@owner = Owner.create(params[:owner]) 

в вашем create method? (Notice the lower case 'o' in @ owner`)

+0

Нет, это не так. Он создает владельца в таблице владельцев, но доцент создает нового пользователя. –

+0

См. Обновленный ответ. Это должно решить проблему. –

+0

Я получаю эту ошибку: ActiveRecord :: AssociationTypeMismatch в OwnersController # create Пользователь (# 18757944) ожидал, получил ActiveSupport :: HashWithIndifferentAccess (# 9440604) –

Смежные вопросы