Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails (Ruby,Rails)CRUD嵌套模型在一个页面上超过4个级别。。。?_Ruby On Rails_Nested_Models - Fatal编程技术网

Ruby on rails (Ruby,Rails)CRUD嵌套模型在一个页面上超过4个级别。。。?

Ruby on rails (Ruby,Rails)CRUD嵌套模型在一个页面上超过4个级别。。。?,ruby-on-rails,nested,models,Ruby On Rails,Nested,Models,虽然有很多令人惊奇的信息,但它似乎总是不符合我疯狂的要求。也就是说,我正在寻找一种机制,通过它可以在一个页面上处理多个嵌套模型 现在,我已经看过了所有关于嵌套两个模型(Railscasts等)的视频和帖子(不是真的,但让我觉得很幽默)。然而,我需要处理嵌套4层的模型,同时使用Javascript保持页面整洁 基本上,我有网站->建筑->控制器->测量,并希望管理(CRUD)在一个单一的页面上完整的网站。我相信这是可能的,但我还没有看到一个合理的干净的方法,我可以围绕我的头。如果有人有任何意见,我

虽然有很多令人惊奇的信息,但它似乎总是不符合我疯狂的要求。也就是说,我正在寻找一种机制,通过它可以在一个页面上处理多个嵌套模型

现在,我已经看过了所有关于嵌套两个模型(Railscasts等)的视频和帖子(不是真的,但让我觉得很幽默)。然而,我需要处理嵌套4层的模型,同时使用Javascript保持页面整洁

基本上,我有网站->建筑->控制器->测量,并希望管理(CRUD)在一个单一的页面上完整的网站。我相信这是可能的,但我还没有看到一个合理的干净的方法,我可以围绕我的头。如果有人有任何意见,我会全神贯注(或者视情况而定)


提前谢谢。

我认为最简单的方法是将其分解为父->子对:

  • 现场->建筑
  • 建筑->控制器
  • 控制器->测量
然后,您就可以在所有4项之间建立一个简单的关系。

签出和简化-- 两者都支持页面上的嵌套模型


请注意,您可能需要对用户进行一些培训。4级深度模型不是人们每天都会遇到的东西。

一些熟练的程序员推荐。当然,您的域可能更复杂,但您不应该在单个视图中公开所有的复杂性。如果您真的需要在一个页面上管理整个站点,我建议您使用多个表单并通过AJAX更新各种显示,而不是尝试在一个表单中完成所有工作。您将拥有更好的可用性和更干净的代码

已编辑

好的,以下是HAML中的示例视图:

%h1 Editing Site
#site-form
  - form_for @site, :class => 'remote', :'data-update' => '#site-form' do |f|
    %p
      = f.label :name
      = f.text_field :name
    %p
      [All the other fields on your Site model]
    %p
      = f.submit "Save Site"


%h2 
  Buildings for 
  = @site.name
#buildings-forms
  - for building in @site.buildings
    %div{ :id => "building-#{building.id}" }
      - form_for building, :class => 'remote', :'data-update' => "#building-#{building.id}" do |f|
        %p
          = f.label :name
          = f.text_field :name
        %p
          [All other building fields]
        %p
          = f.submit "Save Building"    
      %h3 
        Controllers for
        = building.name
        - for cntroller in building.controllers
          %div{ :id => "controller-#{cntroller.id}"}
            - form_for cntroller, :class => 'remote', :'data-update' => "#controller-#{cntroller.id}" do |f|
              %p
                = f.label :name
                = f.text_field :name
              %p
                [All other controller fields]
              %p
                = f.submit "Save Controller"
下一个层次,测量,看起来几乎一样

在jQuery中,您可以说:

$( function() {
  $('form.remote').submit( function() {
    var submitted_form = this;
    $.post( this.action, $.serialize(this), function( data_returned, status, request ) {
      var updated_block = $( data_returned ).find( $(submitted_form).attr('data-update').html();
      $( $(submitted_form).attr('data-update') ).html( updated_block );
    } );
    return false;
  } );

});
这允许每个表单在发布后使用服务器上的新版本发布和更新其可更新块。您可以使用fancier并使用元数据插件来存储应该更新哪个块的信息以及关于请求的其他信息,但这很简单,允许您在html中查看配置。data-x属性是HTML5的一项预定功能,但我们可以继续使用它们


通过为远程表单创建约定,很容易让jQuery用少量代码处理所有ajax帖子。您可能需要一些更高级的东西、微调器、验证等。这是有空间的,但这会让您从一个单页界面开始。

+1 for ActiveScaffold。对于一个报纸网站,我已经在嵌套的脚手架中完成了问题->部分->文章->图像。是的,当它首次出现时,我实际上使用了很多“流线型”框架。我真的很想知道发生了什么。至于用户,我不确定他们是否会在意,因为它将以直观的方式呈现(功能上与从连续的下拉框中选择以选择下一个下拉框没有什么不同)。谢谢你的帖子。是的,我已经搞定了关系。这不是一个问题,但是thx。通过这种方式,我可以在每页的基础上管理它们,我只是在寻找一种通过javascript等直观方式显示所有这些页面的方法。我不希望有人为了管理一个站点而访问4到5个不同的页面。你知道吗?这正是我感兴趣的。我很难理解AJAX控制AJAX控制AJAX的概念。我认为所有的“形式”都是独立的,但似乎有点单一(尽管对于这个特定的项目是“必要的”)。更重要的是,我需要找出一些质量视图管理和部分创建。我想我会从头开始,一路回来。如果你对实施有任何想法,我洗耳恭听。谢谢,太好了!我要试一试。非常感谢。问题:“控制器”是保留字吗?我在任何地方都找不到它。在视图中,“controller”是ActionView::Base的一个属性,它引用了当前请求的控制器。控制器可能不是保留字,但它被大量用作Rails命名约定的一部分,这会影响依赖项的加载和缓存方式。我建议你查阅一本同义词表,寻找合适的替代方法。因此,你展示的这段代码似乎是“仅用于显示”。我一直在阅读,但我似乎无法理解每个部分的“新建”和“编辑”操作。我想我真的在尝试重新创建“active_scaffold”的一些功能。然而,我并没有试图通读他们所有的代码,而是采取了盲目的做法。哦,好吧,我想是按照代码。。。同时,如果您对“新建”和“编辑”活动有任何意见,我洗耳恭听。感谢您迄今为止的所有帮助。以上引用的所有表单均假定为编辑表单。要使这样的模式适用于新的嵌套模型,您必须有点创造性,但这绝对是可能的。恐怕我不清楚您的评论--您希望在编辑视图中看到什么?