2
我有兩種模型:Interview和Interviewee。Rails:多對一關係的嵌套表格
面試和被訪者之間有多對一的關係。
我希望能夠在使用/interviews/new
路線創建新採訪時添加新的Interviewee。如果受訪者已經在場,則新創建的訪談應該與其相關聯。
換句話說,我想爲「belongs_to」關係創建一個嵌套表單。準確地說,創建一個父母或鏈接到一個現有的使用它的孩子的形式。這裏是我的代碼:
interview.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
interviewee.rb
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
採訪 - 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的電子郵件文本框未顯示在視圖中。與此同時,Interviewers的文本框(許多與面試)顯示。任何人都可以對此有所瞭解嗎?我無法在官方的Rails「Form-Helpers」指南中找到有關如何執行此操作的信息。
謝謝!有效 :)。我接受這個答案。如果我想檢查具有給定屬性的受訪者(父母)是否已經存在並且只想將面試(孩子)鏈接到它,該怎麼辦?如何爲它編寫這樣的方法。 –
此外,請做upvote這個問題,因爲它可能對其他也有幫助,這是在rails官方指南中沒有提到的東西:) –