0

因此,在 Rails 应用程序中,我的数据库、硬盘驱动器中有一个表,对于每个硬盘驱动器,我有可变数量的磁头和盘片。当我创建或编辑硬盘驱动器时,我想要 a) 动态显示所需的磁头状态和盘片状态表格的数量,或者 b) 将用户引导到具有适当数量的磁头和状态表格的页面连续这页纸。我赞成选项 a,但我认为它需要一些自定义的 javascript 或其他东西才能使其工作(除非有插件,否则不太可行,我不知道 javascript)。真的,我想拒绝任何没有输入盘片和磁头状态的硬盘。

(变量名当然是hard_drive、platter_status、head_status)

例如,如果我有一个笔记本电脑驱动器,我想在创建驱动器时定义它有 1 个磁头和盘片。当头部和盘片计数组合框中的值发生变化时,显示盘片和头部状态的表格。当点击创建按钮时,它应该使用数据在数据库中创建硬盘驱动器,并根据需要创建每个 platter_status 和 head_status 项。

我该怎么做呢?我知道在视图中,我必须添加一些东西来检测组合框中的变化并使用组合框中的值显示布局。

本质上与此相似


编辑1: 所以,我有这个,到目前为止它不起作用,但我有正确的想法。我偶然发现了一些讨论使用 javascript 动态添加 html 的线程。

  <div class="field" id="head_count" >
    <label for="hard_drive_head_count">Head count</label><br />
    <input id="hard_drive_head_count" name="hard_drive[head_count]" type="number" value="0" />
    <script type="text/javascript">
      var input = document.getElementById('hard_drive_head_count'),
        events = [
        "input",
         ];
      events.map(function(ev) {
      input.addEventListener(ev, function() {
        console.log(ev + ' => ' + input.value);
    if (parseInt(input.value) === 1) {
      document.getElementById('platter_statuses').innerHTML= "howdy";
    } else {
      document.getElementById('platter_statuses').innerHTML="";
    }
      }, false);
      });
    </script>
  </div>
  <label for="platter_status">Platter status</label><br />
  <div class="field" id="platter_statuses" >

  </div>

然而,既然我有了这个,问题就转移到了——我怎样才能用 _form.html.erb 中的表单快速填充 platter_status 视图,并按照应有的方式从数据库中填写所有内容?我在其他方面考虑过,使用一些动态红宝石,但我不确切知道如何传递参数(盘片号和驱动器 ID),以便数据库知道用什么填充它,我不知道在 <%= @SOMETHING_HERE %> 中的 @ 之后放置什么,以便它解析为 platter_status 视图...

4

1 回答 1

0

我实际上发现有一个非常适合我需要的助手。它是模型中的accepts_nested_attributes_for 函数。这与 rails cast 196 和 197 相结合,帮助我实现了我想要的。

在 hard_drive 模型中,您应该有:

attr_accessible :head_statuses_attributes
has_many :head_statuses, :dependent => :destroy
accepts_nested_attributes_for :head_statuses, :allow_destroy => true

对于 head_status 和 platter_status 模型。

在视图中,您需要这样的一行:

<%= link_to_add_fields "add head status", f, :head_status %>

在任何标签的部分外部,您需要一个:

 <%= link_to_remove_fields "Remove", f %> 

有关详细信息,请参阅以下文章: accepts_nested_attributes_for 的工作原理

动态编辑 如何成为可能 动态编辑如何成为可能第 2 部分

于 2012-07-08T16:41:15.597 回答