2011-01-23 4 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 

내 새로운 개발 로그 : 당신이

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

필요 보인다

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

당신은

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

(원래의 대답은) 당신이 owner`)

+0

아니, 그렇게하지 @ 당신의 create method? (Notice the lower case 'o' in

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

을 가지고 찾으셨습니까있는 곳. 소유자 테이블에 소유자를 만들지 만 새로운 사용자를 만듭니다. –

+0

업데이트 된 답변보기 그게 문제를 해결해야합니다. –

+0

이 오류가 발생합니다 : OwnersController #의 ActiveRecord :: AssociationTypeMismatch 생성 사용자 (# 18757944)가 ActiveSupport :: HashWithIndifferentAccess를 얻었습니다. (# 9440604) –

관련 문제