2017-06-23 9 views
0

親が保存される直前に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 
+0

私はあなたが共有しているものと似たような例を試しましたが、うまくいきました。私の見解では、「イベント」を構築する場所がいくつかあります。イベントモデルを共有していただけますか? –

+0

'build'はオブジェクトの配列を構築することができるので、配列を使って1つのビルドメソッドで2つのオブジェクトを構築することができます。 '@books = @ author.books.build([ {published_at:Time.now、book_number:" A12346 "}、 {published_at:Time.now、book_number:" A12347 "} ])と同様です。これがあなたの問題を解決するかどうかはわかりませんが。 – Sajan

+0

@PardeepDhingra私のモデルを追加しました。他のモデルと異なる唯一の点は、子フォームの親を更新するためのaccepts_nested_attributesがあることです。それがここで問題になるかどうかわからない。 – LRP

答えて

1

レコードを保存しない#new方法で作成されます。保存されていないレコードにはIDがないため、#buildメソッドでインスタンス化された子レコードに割り当てるIDはありません。

events.buildを呼び出すと、@folderが保存されたレコードの場合、返されたイベントモデルには、@folderの保存済み親IDがfolder_idとして割り当てられます。

+0

あなたは正しいです、私は後で子供を築いて救ってくれました。 – LRP

関連する問題