rails设计:用户和帐户系统

问题描述:

我一直在试图添加一个帐户给用户几天。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

我期望它看起来像这样。这涉及到子类色器件的注册控制器

#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