在保存父级之前构建2个不同的子级。我理解当我写parent.child.build
时,父母的id会自动提供给孩子。
这里,第一个孩子还可以,但第二个孩子有一个folder_id nil(这是一个has_many关系)
def create
@folder = Folder.new(folder_params)
@folder.events.build(scheduler_resource_id: SchedulerResource.where(user: @folder.maker).last.id,
start: @folder.production_date.beginning_of_month, end: @folder.production_date.end_of_month)
@folder.events.build(scheduler_resource_id: SchedulerResource.where(user: @folder.analyst).last.id,
start: @folder.production_date.beginning_of_month, end: @folder.production_date.end_of_month)
respond_to do |format|
if @folder.save
format.html { redirect_to @folder, notice: 'Folder was successfully created.' }
format.json { render :show, status: :created, location: @folder }
else
format.html { render :new }
format.json { render json: @folder.errors, status: :unprocessable_entity }
end
end
end
我不明白为什么没有给第二个孩子父母的身份。
修改
如上所述,这是我的活动模型
class Event < ApplicationRecord
attr_accessor :date_range
belongs_to :scheduler_resource
belongs_to :folder
accepts_nested_attributes_for :folder
def self.select_folder
Folder.all.map { |p| ["#{p.client.corporate_name} - #{p.concatenate_mandates} (#{p.status})", p.id] }
end
def all_day_event?
start == start.midnight && self.end == self.end.midnight ? true : false
end
end
答案 0 :(得分:1)
在代码示例中,使用@folder
方法创建#new
,但不保存记录。未保存的记录没有id,因此没有id分配给使用#build
方法实例化的子记录。
如果在您调用events.build
时@folder是已保存的记录,则返回的事件模型会将@folder
中已保存的父ID分配为folder_id
。