【发布时间】:2017-07-31 21:22:20
【问题描述】:
我有两个模型:Interview 和Interviewee。
Interview 和Interviewee 之间存在多对一的关系。
我希望能够在使用/interviews/new 路由创建新采访时添加新的受访者。如果受访者已经在场,则应将新创建的采访链接到它。
换句话说,我想为“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 %>
由于某种原因,受访者的电子邮件文本框未显示在视图中。同时,显示采访者的文本框(多对多采访)。任何人都可以对此有所了解吗?我在 Rails 官方“Form-helpers”指南中找不到有关如何执行此操作的信息。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-5