2013-04-23 93 views
0

我使用設計來驗證用戶,當新用戶註冊時,我也想創建新帳戶,並將此用戶設置爲帳戶的所有者。我決定爲此使用嵌套模型。這是我的設置:Rails3 +設計+ simple_form + nested_model

型號:

class User < ActiveRecord::Base 
    belongs_to :account 
    has_one :owned_account, :class=> Account, :foreign_key => :owner_id 
    accepts_nested_attributes_for :owned_account 
end 

class Account < ActiveRecord::Base 
    has_many :users 
    belongs_to :owner, :class => User, :foreign_key => :owner_id 
end 

路線:

​​

重寫色器件登記控制器:

class RegistrationsController < Devise::RegistrationsController 
    def new 
    super 
    owned_account = resource.build_owned_account 
    end 

    def create 
    super 
    end 
end 

形式:

<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %> 
    <%= f.error_notification %> 

    <div class="form-inputs"> 
    <%= f.input :email, :required => true, :autofocus => true %> 
    <%= f.input :password, :required => true %> 
    <%= f.input :password_confirmation, :required => true %> 

    <%= f.simple_fields_for :owned_account do |account| %> 
     <%= account.input :name, :required => true %> 
    <% end %> 
    </div> 

    <div class="form-actions"> 
    <%= f.button :submit, "Sign up" %> 
    </div> 
<% end %> 

當我訪問sign_up路徑時不會引發異常,但不會生成表單的嵌套部分。有幾個類似的問題了,但提供的解決方案似乎並沒有爲我工作...

回答

0

問題是在覆蓋控制器中使用super。 此編碼適用於:

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

    def create 
    super 
    end 
end 
0

根據您的代碼:

def new 
    super 
    owned_account = resource.build_owned_account 
end 

變量owned_account不在您的視圖訪問。如何更換該行:

resource.owned_account = resource.build_owned_account 
相關問題