rails devise:用户和帐户系统

时间:2012-07-16 16:45:31

标签: ruby-on-rails devise

我一直在努力为用户添加一个帐户几天。

我已经安装了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

的应用程序/视图/设计/注册/ new.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

编辑2

好的,菜鸟错了。我刚刚补充:计划帐户模型。

之后我收到了查询错误,我刚刚更改了我的数据库中的一些字段= null =&gt; false to null =&gt;真实而瞧瞧。

1 个答案:

答案 0 :(得分: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 %>