Rails构建了child,但是父id没有

时间:2017-06-23 14:36:55

标签: ruby-on-rails ruby

在保存父级之前构建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

1 个答案:

答案 0 :(得分:1)

在代码示例中,使用@folder方法创建#new,但不保存记录。未保存的记录没有id,因此没有id分配给使用#build方法实例化的子记录。

如果在您调用events.build时@folder是已保存的记录,则返回的事件模型会将@folder中已保存的父ID分配为folder_id