0

これをラベル付けする最善の方法はわかりませんが、基本的には 3 つのモデルがあり、

コース: 多くのセッションを持つ科目 セッション: 1 つのセッションを構成する多くのスロットがあります スロット: 発生する日時があります

アイデアは、コースに興味がある場合は、登録してセッションを受講することです。各セッションには同じ数のスロットがありますが、これらは月の異なる時期になる可能性があります (たとえば、7 月 30 日から 8 月 3 日までの 5 日間のセッション、または 1 週間後の 8 月 6 日から 8 月 10 日までの同じセッションを受けることができます)。 )

そのため、ネストされた for をセットアップして、セッションを追加または削除できるようにする必要があります。それぞれのネストされたスロットの数は同じである必要があります (フォームの上のドロップダウンの数に基づいて)。

誰かがこれを行う良い方法を考えることができますか? または厄介な方法ですか?困っています:)

アップデート

私はそれをいくつかのJSなどで動作させていますが、保存すると、セッションスロットセッションが無効であるというエラーが常に発生します-スロットsession_idを親セッションに設定せず、セッションcourse_idをコースに設定しません

理由がわかりません。これを前に見た人はいますか?オブジェクトは has_many 配列にあります...

更新 2

{"タイトル"=>"test123"、"説明"=>"test123"、"sessions_attributes"=>{"0"=>{"slots_attributes"=>{"0"=>{"when(3i)"= >"10", "いつ(2i)"=>"8", "いつ(1i)"=>"2012", "いつ(4i)"=>"10", "いつ(5i)"=>" 00", "_destroy"=>"0"}, "1"=>​​{"when(3i)"=>"10", "when(2i)"=>"8", "when(1i)"= >"2012", "when(4i)"=>"10", "when(5i)"=>"00", "_destroy"=>"0"}, "2"=>{"when(3i) "=>"", "when(2i)"=>"", "when(1i)"=>"","when(4i)"=>"", "when(5i)"=>"", "_destroy"=>"1"}, "3"=>{"when(3i)"=>"", "いつ(2i)"=>""、"when(1i)"=>""、"when(4i)"=>""、"when(5i)"=>""、"_destroy"=>"1" }, "4"=>{"when(3i)"=>"", "when(2i)"=>"", "when(1i)"=>"", "when(4i)"=>" "、"when(5i)"=>""、"_destroy"=>"1"}、"5"=>{"when(3i)"=>""、"when(2i)"=>"" , "when(1i)"=>"", "when(4i)"=>"", "when(5i)"=>"", "_destroy"=>"1"}、"6"=>{"when(3i)"=>""、"when(2i)"=>""、"when(1i)"=>""、"when(4i) )"=>""、"when(5i)"=>""、"_destroy"=>"1"}、"7"=>{"when(3i)"=>""、"when(2i) "=>"", "when(1i)"=>"", "when(4i)"=>"", "when(5i)"=>"", "_destroy"=>"1"}," 8"=>{"when(3i)"=>"", "when(2i)"=>"", "when(1i)"=>"", "when(4i)"=>""," when(5i)"=>"", "_destroy"=>"1"}, "9"=>{"when(3i)"=>"","when(2i)"=>""、"when(1i)"=>""、"when(4i)"=>""、"when(5i)"=>""、"_destroy"=>"1 "}, "10"=>{"when(3i)"=>"", "when(2i)"=>"", "when(1i)"=>"", "when(4i)"=> ""、"when(5i)"=>""、"_destroy"=>"1"}、"11"=>{"when(3i)"=>""、"when(2i)"=>" "、"when(1i)"=>""、"when(4i)"=>""、"when(5i)"=>""、"_destroy"=>"1"}、"12"=> {"when(3i)"=>""、"when(2i)"=>""、"when(1i)"=>""、"when(4i)"=>"", "when(5i)"=>"", "_destroy"=>"1"}, "13"=>{"when(3i)"=>"", "when(2i)"= >""、"when(1i)"=>""、"when(4i)"=>""、"when(5i)"=>""、"_destroy"=>"1"}、"14" =>{"when(3i)"=>"", "when(2i)"=>"", "when(1i)"=>"", "when(4i)"=>"", "when( 5i)"=>"", "_destroy"=>"1"}, "15"=>{"when(3i)"=>"", "when(2i)"=>"", "when(1i) )"=>""、"when(4i)"=>""、"when(5i)"=>""、"_destroy"=>"1"}、"16"=>{"when(3i)"=>""、"when(2i)"=>""、"when(1i)"=>""、"when(4i)"= >""、"when(5i)"=>""、"_destroy"=>"1"}、"17"=>{"when(3i)"=>""、"when(2i)"=> ""、"when(1i)"=>""、"when(4i)"=>""、"when(5i)"=>""、"_destroy"=>"1"}、"18"= >{"when(3i)"=>""、"when(2i)"=>""、"when(1i)"=>""、"when(4i)"=>""、"when(5i) )"=>"", "_destroy"=>"1"}, "19"=>{"when(3i)"=>"", "when(2i)"=>""、"when(1i)"=>""、"when(4i)"=>""、"when(5i)"=>""、"_destroy"=>"1"}}}} }

アップデート 3

保存する前にこのコードを追加すると修正されましたが、なぜ必要なのかわかりません。

def apply_nested_models_hack
  ## HACK ##
  
  @course.sessions.each do |s|
    s.course = @course
    s.slots.each { |ss| ss.session = s }
  end
  
  ## /HACK ##
end

問題を解決したにもかかわらず、関係が設定されていない理由を知りたいのですが、質問に答えていません。

更新 4

これはネストされたフォームではなく、私が持っていた事実であることがわかりました:

validates :session, presence: true 

on Slot - ActiveRecord は、保存後までリレーションシップのこちら側を設定しないため、無効と見なされ、保存されませんでした。まだ永続化されていない場合でも、データベースにあったように関係を表示する必要があるため、これは AR のバグであると考えています。

4

2 に答える 2

0

Railsだけを使用すると、いくつかのレベルの深さをネストするのは難しいでしょう。確かに可能ですが、面倒になる可能性があります。

このgemをご覧になることをお勧めします:https ://github.com/ryanb/nested_form/

私はそれを使用しませんでしたが、それは非常に有望なようです

于 2012-07-31T16:41:20.400 に答える
0

これはネストされたフォームではなく、私が持っていた事実であることがわかりました:

validates :session, presence: true 

on Slot - ActiveRecord は、保存後までリレーションシップのこちら側を設定しないため、無効と見なされ、保存されませんでした。まだ永続化されていない場合でも、データベースにあったように関係を表示する必要があるため、これは AR のバグであると考えています。

于 2012-08-06T11:18:31.573 に答える