1

ここ数日、ユーザーにアカウントを追加しようとしています。

問題なく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| %>

今、私は :plan を account_form に追加しようとしています。

Can't mass-assign protected attributes: plan

編集2

わかりました、新人ミス。:plan をアカウント モデルに追加しました。

その後、クエリ エラーが発生しました。DB のいくつかのフィールドを null => false から null => true に変更しました。

4

1 に答える 1

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 %>
于 2012-07-16T17:28:48.490 に答える