2012-07-31 106 views
0

多层我不知道这个标签的最佳方式,但基本上,我有3种型号,Rails的嵌套形式深

课程:一个主题,其中有许多会议 会议:拥有众多的插槽,弥补一个会话 插槽:有它发生的日期和时间

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

所以我需要尝试设置我的嵌套的,所以你可以添加或删除会话,每个人应该有相同数量的嵌套插槽(基于一个数字在下拉某个地方的形式)。

谁能想到这样做的一个很好的方式吗?甚至是一个讨厌的方式?我有麻烦:)

更新

我有一些JS和东西的工作,但现在当它保存,它总是错误说会话插槽会话是无效的 - 它不是设置插槽SESSION_ID其父会议和不设置COURSE_ID到课程

我想不通,为什么会。任何人见过这个?的对象是的has_many阵列中...

更新2

{ “标题”=> “test123”, “描述”=> “test123”, “sessions_attributes”=> { “0”=> { “slots_attributes”=> { “0”=> { “时的(3R)”=> “10”, “时(2I)”=> “8”, “时(1i)中”=> “2012”,“当(4i)“=>”10“,”当(5i)“=>”00“,”_destroy“=>”0“},”1“=>”当(3i) (2i)“=>”8“,”当(1i)“=>”2012“,”当(4i)“=>”10“,”当(5i)“=>”00“ (3i)“=>”“,”(2i)“=>”“,”(1i)“=>”“,”when(1i)“时,”_destroy“=>”0“},”2“=> (4i)“=>”“,”when(5i)“=>”“,”_destroy“=>”1“},”3“=> 2i)“=>”“,”when(1i)“=>”“,”when(4i)“=>”“,”when(5i)“=>”“,”_destroy“=>”1“} (3i)“=>”“,”(2i)“=>”“,”(1i)“=>”“,”(4i)“=>”“时,”4“=> (3i)“=>”“,”(2i)“=>”“时,”(5i)“=>”“,”_destroy“=>”1“},”5“=> “when(1i)”=>“”,“when(4i)”=>“” (3i)“=>”“,”(2i)“=>”“时,”(5i)“=>”“,”_destroy“=>”1“},”6“=> “(4i)”=>“”,“(5i)”=>“”,“_destroy”=>“1”},“7”=>“”时,当(2i)“=>”“,”(1i)“=>”“,”(4i)“=>”“,”(5i)“=>” (3i)“=>”“,”(2i)“=>”“,”(1i)“=>”“时,”>“,”_destroy“=>”1“}, (4i)“=>”“,”when(5i)“=>”“,”_destroy“=>”1“},”9“=>”当“(3i)”=>“ ”, “时(2I)”=> “”, “时(1i)中”=> “”, “时(4I)”=> “”, “时(图5I)”=> “”, “_destroy”= (3i)“=>”“,”(2i)“=>”“,”(1i)“=>”“时的”1“,”10“=> (3i)“=>”“,”(2i)“时”=>“”,“当(5i)”=>“”,“_destroy”=>“1”},“11”=> (1i)“=>”“,”(4i)“=>”“,”(5i)“=>”“,”_destroy“=>”1“},12 (3i)“=>”“,”(2i)“=>”“时,”(1i)“=>”“,”(4i)“=>”“,”当(3i)“=>”“,”当(2i)“=>”“,”(5i)“=>”“,”_destroy“=>”1“},”13“=> 1i)中 “=>” “ ”时(4I)“=> ”“, ”时(图5I)“=> ”“, ”_destroy“=> ”1“}, ”14“=> {” 时的(3R )“=>”“,”when(2i)“=>”“,”when(1i)“=>”“,”when(4i)“=>”“,”when(5i)“=>”“ ,“_destroy”=>“1”},“15”=> {“when(3i)”=>“”, (2i)“=>”“,”(1i)“=>”“时,”(4i)“=>”“,”(5i)“=>”“时,”_destroy“=> (3i)“=>”“,”(2i)“=>”“,”(1i)“=>”“时,”(4i)“=” (2i)=>“”,“(3i)”=>“”时,“(5i)”=>“”,“_destroy”=>“1”},“17”=>当(1i)“=>”“,”(4i)“=>”“,”(5i)“=>”“,”_destroy“=>”1“}时,”18“=” (2i)“=>”“,”(1i)“=>”“,”(4i)“=>”“时,”(3i)“=>” (3i)“=>”“,”(2i)“=>”“,”(1i)“时,”=>“”,“_destroy”=>“1”}, “=>””, “时(4I)”=> “”, “时(图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中的一个错误,因为它应该显示数据库中的关系,即使它们还没有被保存。

+0

那么输出结果并不好看。你能复制/粘贴表格的代码吗?最好在要点或pastebin ...帖子变长了! – 2012-08-01 14:19:55

+0

我已经基本上得到它呈现20个项目,设置_destroy = 1它没有使用和隐藏它们。这是行得通的,那个输出是我的预期。 – 2012-08-01 14:41:14

回答

0

事实证明,这不是嵌套形式,但事实上我:

validates :session, presence: true 

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

0

只使用Rails,嵌套几个级别会很棘手。可以肯定,但可能会变得混乱。

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

我没有使用它,但它看起来非常有前途

+0

感谢您的回应 - 我已经写了一些非常相似的东西。我的主要问题是要么显示正确数量的插槽,并让他们正确地填充服务器端。我得到的最接近的是当创建一个会话时默认添加20个插槽,然后用javascript隐藏/显示正确的数量,然后在服务器端删除额外的 - 这个工作,但session_id从来没有设置为插槽,并且错误每次..不能工作这一个 – 2012-08-01 08:24:13

+0

我会开始分析你发送到你的控制器从开发日志文件的形式! – 2012-08-01 12:53:12

+0

它似乎是发送正确的东西,{“sessions_attributes”=> {“0”=> {“slots_attributes”=> {“0”=> ....,“1”=> ....}} ,“1”=> {“slots_attributes”=> {“0”=> ....,“1”=> ....}}}看起来正确! – 2012-08-01 13:31:04