2012-07-16 119 views
1

我一直在試圖添加一個帳戶給用戶幾天。rails設計:用戶和帳戶系統

我已經安裝Devise沒有問題,但現在我想添加一個公司名稱字段到我的註冊表格。

這裏是我的代碼:

應用程序/模型/ account.rb

class Account < ActiveRecord::Base 
    attr_accessible :name 
    has_many :users 
    accepts_nested_attributes_for :users 
end 

應用程序/模型/ user.rb

class User < ActiveRecord::Base 

    belongs_to :account 

    devise :database_authenticatable, :registerable, 
    :recoverable, :rememberable, :trackable, :validatable, :confirmable 

    attr_accessible :first_name, :last_name, :account_attributes, :account, :email, :password, :password_confirmation, :remember_me 

end 

應用程序/視圖/設計/註冊/新。 html.erb

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

    <div><%= f.label :first_name %><br /> 
    <%= f.text_field :first_name %></div> 

    <div><%= f.label :last_name %><br /> 
    <%= f.text_field :last_name %></div> 

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

    <div><%= f.label :email %><br /> 
    <%= f.email_field :email %></div> 

    <div><%= f.label :password %><br /> 
    <%= f.password_field :password %></div> 

    <div><%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation %></div> 

    <div><%= f.submit "Sign up" %></div> 
<% end %> 

這是所有的代碼我有。我沒有改變任何東西。

這是我得到的錯誤:

Account(#2175324980) expected, got ActiveSupport::HashWithIndifferentAccess(#2169631580) 

在此先感謝。

編輯

我已經找到了解決辦法:

我已經改變了

<%= f.fields_for :account do |account_form| %> 

<%= f.fields_for :account_attributes, resource.account do |account_form| %> 

現在,我嘗試添加:計劃account_form,我得到:

Can't mass-assign protected attributes: plan 

EDIT 2

好了,新手的錯誤。我剛剛添加了:計劃帳戶模型。

之後,我得到一個查詢錯誤,我只是將我的數據庫中的一些字段從null => false更改爲null => true和瞧。

+0

我相信你'user'應當受理帳戶嵌套的屬性,而不是其他方式,否則你會創建與fields_for用戶 – DVG 2012-07-16 16:57:11

+0

帳戶當我刪除了'accepts_nested_attributes_for:用戶'從我的帳戶模型中刪除表單中的文本字段。 – 2012-07-16 17:04:09

回答

0

我期望它看起來像這樣。這涉及到子類色器件的註冊控制器

#models 
class Account < ActiveRecord::Base 
    attr_accessible :name 
    has_many :users 
end 

class User < ActiveRecord::Base 
    belongs_to :account 
    accepts_nested_attributes_for :account 
    attr_accessible :first_name, :last_name, :account_attributes, :account, :email, :password, :password_confirmation, :remember_me 

end 

#app/controllers/registrations_controller.rb 
class RegistrationsController < Devise::RegistrationsController 
    def new 
     @account = Account.new 
     super 
    end 
end 


#routes 
devise_for :users, :controllers => {:registrations => "registrations"} 


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

    <div><%= f.label :first_name %><br /> 
    <%= f.text_field :first_name %></div> 

    <div><%= f.label :last_name %><br /> 
    <%= f.text_field :last_name %></div> 

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

    <div><%= f.label :email %><br /> 
    <%= f.email_field :email %></div> 

    <div><%= f.label :password %><br /> 
    <%= f.password_field :password %></div> 

    <div><%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation %></div> 

    <div><%= f.submit "Sign up" %></div> 
<% end %> 
+0

這正是我現在所擁有的,但'fields_for'不起作用,因爲我看不到帳戶標籤和輸入。 – 2012-07-16 17:38:45

+0

嘗試在控制器操作中創建一個新的Account對象,並改爲執行'fields_for @ account'。 – DVG 2012-07-16 17:41:26

+0

用戶或帳戶控制器?由於用戶控制器由devise處理,我實際上沒有帳戶控制器。就像我在原帖中說的那樣,這是我爲此所做的唯一代碼。 – 2012-07-16 17:49:29