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和瞧。
我期望它看起来像这样。这涉及到子类色器件的注册控制器
#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 %>
这正是我现在所拥有的,但'fields_for'不起作用,因为我看不到帐户标签和输入。 – 2012-07-16 17:38:45
尝试在控制器操作中创建一个新的Account对象,并改为执行'fields_for @ account'。 – DVG 2012-07-16 17:41:26
用户或帐户控制器?由于用户控制器由devise处理,我实际上没有帐户控制器。就像我在原帖中说的那样,这是我为此所做的唯一代码。 – 2012-07-16 17:49:29
我相信你'user'应当受理帐户嵌套的属性,而不是其他方式,否则你会创建与fields_for用户 – DVG 2012-07-16 16:57:11
帐户当我删除了'accepts_nested_attributes_for:用户'从我的帐户模型中删除表单中的文本字段。 – 2012-07-16 17:04:09