ユーザーモデルとインストラクターモデルがあります。ユーザーとインストラクターの間には1対1の関係があります。また、一部のユーザーはインストラクターになり、一部のユーザーはそうではありません。そのため、fields_forメソッドを使用して両方に書き込む登録フォームがあります。
チェックボックスなどを使用して、インストラクターであると言われた場合にのみ、インストラクターテーブルに書き込むにはどうすればよいですか。そして、彼らが書くとき、私はフォームの残りの部分と一緒にテーブルの検証を維持したいと思います
モデルを介してこれを実行できれば、これが最適に機能するのが理想的ですが、すべての提案を受け入れます。
インストラクターモデル
class Instructor < ActiveRecord::Base
belongs_to :user
validates_presence_of :school_url, :etc...
attr_accessible :school_url, :etc...
end
ユーザーモデル
class User < ActiveRecord::Base
has_one :instructor, :dependent => :destroy
validates_uniqueness_of :email
validates :email, :confirmation => true
accepts_nested_attributes_for :instructor
attr_accessible :email, :password, :instructor_attributes, :etc
end
HAMLのフォーム
- resource.build_instructor
- form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f|
= hidden_field_tag :destination, { :value => destination}
.field
= f.label :firstname, "First Name"
= f.text_field :firstname
.field
= f.label :lastname, "Last Name"
= f.text_field :lastname
.field
= f.label :email, "E-Mail"
= f.email_field :email
.field
= f.label :email_confirmation, "Confirm E-Mail"
= f.email_field :email_confirmation
.field
= f.label :password
= f.password_field :password
.field
= f.label :password_confirmation, "Confirm Password"
= f.password_field :password_confirmation
#instructor-box
%p
%span.bold Are you an instructor?
= check_box_tag :instructor_check
%span Yes, I am an instructor
= f.fields_for :instructor do |i|
= render "/users/registrations/instructor", :form => i