親が保存される直前に2つの異なる子を構築します。 parent.child.build
と書くと、親のIDが自動的に子供に与えられることを理解しています。ここでビルドされた子、親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
親のidが第二子に与えられていない理由を私は理解していないfolder_id nilを持っています。 @folder
を提供するコードサンプルで
EDIT
尋ねたとして、ここに私のイベントモデルがある
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
私はあなたが共有しているものと似たような例を試しましたが、うまくいきました。私の見解では、「イベント」を構築する場所がいくつかあります。イベントモデルを共有していただけますか? –
'build'はオブジェクトの配列を構築することができるので、配列を使って1つのビルドメソッドで2つのオブジェクトを構築することができます。 '@books = @ author.books.build([ {published_at:Time.now、book_number:" A12346 "}、 {published_at:Time.now、book_number:" A12347 "} ])と同様です。これがあなたの問題を解決するかどうかはわかりませんが。 – Sajan
@PardeepDhingra私のモデルを追加しました。他のモデルと異なる唯一の点は、子フォームの親を更新するためのaccepts_nested_attributesがあることです。それがここで問題になるかどうかわからない。 – LRP