Rails嵌套形成多层深层

时间:2012-07-31 16:08:08

标签: ruby ruby-on-rails-3

我不知道标记这个的最好方法,但基本上,我有3个模型,

课程:一个主题,有很多会话 会话:有许多插槽组成一个会话 插槽:具有发生在

上的日期和时间

这个想法是,如果您对课程感兴趣,请注册参加课程。每个会话将有相同数量的老虎机,但这些可能在一个月的不同时间(例如,你可以在7月30日至8月3日,或一周后,8月6日至8月10日同一会议)

所以我需要尝试设置我的嵌套for,所以你可以添加或删除Sessions,每个都应该有相同数量的嵌套Slots(基于表格上某处的下拉数字)。

有人能想到这样做的好方法吗?甚至是一种讨厌的方式?我遇到了麻烦:)

更新

我已经使用了一些JS和东西,但是现在当它保存时,它始终是错误,说Sessions插槽会话无效 - 它没有将插槽session_id设置为其父会话而且它没有将会话course_id设置为当然

我无法理解为什么。有人见过这个吗?对象位于has_many数组中......

更新2

{“title”=>“test123”,“description”=>“test123”,“sessions_attributes”=> {“0”=> {“slots_attributes”=> {“0”=> ; {“when(3i)”=>“10”,“when(2i)”=>“8”,“when(1i)”=>“2012”,“when(4i)”=> “10”,“when(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 )“=>”“,”when(2i)“=>”“,”when(1i)“=>”“,”when(4i)“=>”“,”when(5i)“ =>“”,“_ destroy”=>“1”},“4”=> {“when(3i)”=>“”,“when(2i)”=>“”,“当(1i)“=>”“,”当(4i)“=>”“,”当(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)”=>“”,“_ destro y“=>”1“},”7“=> {”when(3i)“=>”“,”when(2i)“=>”“,”when(1i)“=> “”,“when(4i)”=>“”,“when(5i)”=>“”,“_ destroy”=>“1”},“8”=> {“when(3i) “=>”“,”当(2i)“=>”“,”when(1i)“=>”“,”when(4i)“=>”“,”when(5i)“= >“”,“_ destroy”=>“1”},“9”=> {“when(3i)”=>“”,“when(2i)”=>“”,“when( 1i)“=>”“,”当(4i)“=>”“,”当(5i)“=>”“,”_ destroy“=>”1“},”10“=> {“when(3i)”=>“”,“when(2i)”=>“”,“when(1i)”=>“”,“when(4i)”=>“”,“当(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)“=>”“,”当(1i)“=>”“,”当(4i)“=>”“,”当(5i)“=>”“,”_ destroy“=> ;“1”},“14”=> {“when(3i)”=>“”,“when(2i)”=>“”,“when(1i)”=>“”,“ when(4i)“=>”“,”when(5i)“=>”“,”_ d estroy“=>”1“},”15“=> {”when(3i)“=>”“,”when(2i)“=>”“,”when(1i)“=> “”,“when(4i)”=>“”,“when(5i)”=>“”,“_ destroy”=>“1”},“16”=> {“when(3i) “=>”“,”当(2i)“=>”“,”when(1i)“=>”“,”when(4i)“=>”“,”when(5i)“= >“”,“_ destroy”=>“1”},“17”=> {“when(3i)”=>“”,“when(2i)”=>“”,“when( 1i)“=>”“,”当(4i)“=>”“,”当(5i)“=>”“,”_ destroy“=>”1“},”18“=> {“when(3i)”=>“”,“when(2i)”=>“”,“when(1i)”=>“”,“when(4i)”=>“”,“当(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 
插槽上的

- ActiveRecord在保存之前不设置关系的这一面,因此它被认为是无效的并且不会保存。我认为这是AR中的一个错误,因为它应该显示数据库中的关系,即使它们还没有被保留。

2 个答案:

答案 0 :(得分:0)

使用Rails,嵌套几层深度将是棘手的。可以肯定,但它可能会变得混乱。

我建议你看看这个宝石:https://github.com/ryanb/nested_form/

我没有使用它,但似乎很有希望

答案 1 :(得分:0)

事实证明这不是嵌套形式,而是事实:

validates :session, presence: true 
插槽上的

- ActiveRecord在保存之前不设置关系的这一面,因此它被认为是无效的并且不会保存。我认为这是AR中的一个错误,因为它应该显示数据库中的关系,即使它们还没有被保留。