2017-07-31 20 views
2

私は2つのモデルを持っています:インタビューとインタビューがあります。Rails:多対1の関係のネストされたフォーム

インタビューとインタビューの間には、多くの関係があります。

/interviews/newルートを使用して新しいインタビューを作成する際に、新しいインタビュー担当者を追加したいと考えています。面接者が既に存在していた場合は、新しく作成された面接はそれに関連している必要があります。

つまり、「belongs_to」関係のネストされたフォームを作成したいと考えています。正確には、その子のフォームを使用して、親を作成するか、既存のものにリンクします。ここに私のコードは次のとおりです。

class Interviewee < ApplicationRecord 
has_many :interviews, inverse_of: :interviewee 
end 

インタビューコントローラ

class InterviewsController < ApplicationController 
    def index 
     @interviews = Interview.all 
    end 

    def new 
     @interview = Interview.new 
     #2.times {@interview.interviewers.build} 
     @interview.interviewers.build 
     #@interview.interviewee.build 
    end 

    def create 
     #render plain: params[:interview].inspect 
     @interview = Interview.new(interview_params) 

     @interview.save 
     redirect_to @interview 
    end 

    private 
     def interview_params 
      params.require(:interview).permit(
       :title, :date, :start_time, :end_time, 
       interviewee_attributes: [:id, :email], 
       interviewers_attributes: [:id, :email] 
      ) 
     end 
end 

インタビューinterviewee.rb

class Interview < ApplicationRecord 
belongs_to :interviewee, inverse_of: :interviews 
has_many :meetings 
has_many :interviewers, through: :meetings 
accepts_nested_attributes_for :interviewee 
accepts_nested_attributes_for :interviewers 
end 

interview.rb

- new.html.erb

<h1>Schedule a New Interview</h1> 

<%= form_for @interview, url: interviews_path do |f| %> 
    <p> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
    </p> 

    <p> 
    <%= f.label :date %><br> 
    <%= f.date_field :date %> 
    </p> 

    <p> 
    <%= f.label :start_time %><br> 
    <%= f.time_field :start_time %> 
    </p> 

    <p> 
    <%= f.label :end_time %><br> 
    <%= f.time_field :end_time %> 
    </p> 

    <%= f.fields_for :interviewee do |interviewee| %> 
    <p> 
     Interviewee Email:<br> 
     <%= interviewee.text_field :email %> 
    </p> 
    <% end %> 

    <%= f.fields_for :interviewers do |interviewer| %> 
    <p> 
     Interviewer Emails:<br> 
     <%= interviewer.text_area :email %> 
    </p> 
    <% end %> 

    <p> 
    <%= f.submit %> 
    </p> 
<% end %> 

何らかの理由で、Intervieweeの電子メールテキストボックスがビューに表示されません。同時に、インタビュアーのためのテキストボックス(インタビューを伴う多くのものか​​ら多くのもの)が表示されます。誰かがこれについていくつかの光を当てることができますか?私は公式の "Form-helpers"ガイドでこれを行う方法については知りませんでした。

答えて

2

何らかの理由で、Intervieweeの電子メールテキストボックスが ビューに表示されません。

あなたはビルドnew方法でネストされたオブジェクトする必要があります。

def new 
    @interview = Interview.new 
    #2.times {@interview.interviewers.build} 
    @interview.interviewers.build 
    @interview.build_interviewee #here 
end 

よう@interview属性のネストされたassociatio n個が含まれていますし、それらが

またフォームビルダのために利用できるようになり、あなたはまた、以下のようにそれを行うことができます

<%= f.fields_for :interviewee, @interview.build_interviewee do |interviewee| %> 
+0

ありがとう!出来た :)。私はこの答えを受け入れる。与えられた属性を持つインタビュアー(親)が既に存在し、単にインタビュー(子)をそれにリンクさせたいのかどうかチェックしたいのですが?そのような方法を書く方法。 –

+0

また、他の人にも役に立つかもしれないので、この質問をupvoteしてください。それは、レールの公式ガイドに記載されていないものです:) –

関連する問題