2011-12-02 6 views
3

私は2つのモデル、ユーザーモデル、学校モデルがあるシステムで作業しています。レール延長の登録フォーム

私は、ユーザーが通常のユーザーかschool_userかを示す追加のフィールドとして 'role'を持つ通常のユーザーsign_upにdevise登録を使用しています。

今のところ、ユーザーがdevise/sign_upアクションを使用して登録している間に新しい学校記録を作成する管理者ユーザーがいます。学校にはまだログイン情報がありません。

私は新しい学校を追加するために学校/新しい行動(学校のサインアップリンクとして)を呼び出すことができます。

代わりに、新しいユーザーとして「新しい学校のサインアップリンク」(ユーザーモデルにメール、パスワード、ロール=「学校」を使用)と名前のような他のフィールドを使用して登録する学校のユーザー登録を拡張したい、住所などの情報が含まれています。このようにして、学校管理者もログインアカウントを取得します。

私は覚書/登録フォームを延長し、これら2つのレコードを作成するにはどうすればよいですか?

私は本当に感謝しています。

+0

任意のアイデア?なし?私は学校/ new.html.erbを "form_for"の代わりに "form_tag"を使用するように拡張し、電子メール/パスワード/役割のようなユーザーモデルパラメータを含むようにフォームを拡張することを考えていました。 create_actionのパラメータを読んで、2つのレコード(ユーザーモデルと学校モデル)を作成します。これは意味をなさないでしょうか?私は正しい方向に私を導く考えを本当に感謝します。ありがとう。 – Atarang

+0

気にしないでください。それは働いた。 deviseのregistrations_controllerとviewsをオーバーライドします。 – Atarang

+0

あなたの答えを入れることをお勧めします! –

答えて

0

オーバーライドは、登録ルートを考案:

routes.rbを:

devise_for :users, controllers: {registrations: 'registrations'} 

は、コントローラ/ registrations_controller.rb作成:学校のフィールドを検証するには

class RegistrationsController < Devise::RegistrationsController 

    after_filter :add_school 

    protected 

    def add_school 

     if resource.persisted? # user is created successfuly 

      # resource holds all your form data. 
      resource.schools.build do |school| 
       school.name = resource.school_name # form fields... 
      end 

      @school.save 
     end 
    end 
end 

をごuser.rbモデルに検証を追加例えば、

参考まで
class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 

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

    validates :name, 
       presence: true, 
       length: {in: 1..50} 

    validates :school_name, 
       presence: true, 
       length: {in: 1..50} 
end 

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

    <div><%= f.label :school_name %> 
     <br/> 
     <%= f.text_field :name, autofocus: true %></div> 

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

    # ... 

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

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