Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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 是否可以为cocoon gem创建的嵌套属性创建动态标签名称?_Ruby On Rails_Cocoon Gem - Fatal编程技术网

Ruby on rails 是否可以为cocoon gem创建的嵌套属性创建动态标签名称?

Ruby on rails 是否可以为cocoon gem创建的嵌套属性创建动态标签名称?,ruby-on-rails,cocoon-gem,Ruby On Rails,Cocoon Gem,我使用cocoon gem创建了一个具有嵌套属性的表单。单击链接到添加关联时,它将附加标签和文本字段。但是,我希望标签名称是动态的,因为每个标签的标签名称都是不同的。例如,我希望第一个标签的标签名为“A:”,第二个标签的标签名为“B:”,依此类推。有可能做到这一点吗 /_mcq.html.erb <%= f.fields_for :mcq_options do |option| %> <%= render 'question_paper_generations/mcq_op

我使用cocoon gem创建了一个具有嵌套属性的表单。单击链接到添加关联时,它将附加标签和文本字段。但是,我希望标签名称是动态的,因为每个标签的标签名称都是不同的。例如,我希望第一个标签的标签名为“A:”,第二个标签的标签名为“B:”,依此类推。有可能做到这一点吗

/_mcq.html.erb

<%= f.fields_for :mcq_options do |option| %>
  <%= render 'question_paper_generations/mcq_option_fields', f: option %>
<% end %>

<div><%= link_to_add_association 'Add Option', f, :mcq_options %></div>
/_mcq_options_fields.html.erb

<%= f.label :option %>
<%= f.text_field :option, class: 'form-control' %>

假设嵌套字段位于div选项中

$(document).ready(function() {

  var next_label = "A";

  def next_char(c) {
    next = "A";
    if (c != "Z") {
      next = String.fromCharCode(next.charCodeAt(0) + 1);
    };
    return next;
  };

  $('#options').on('cocoon:after-insert', function(e, added_option) {
    added_option.find("label").first().text(next_label+":");
    next_label = next_char(next_label);
  });

});
编辑

使用罗马数字的步骤:取自:。笔记有评论说这无法工作,因为对象没有顺序。您应该测试它,或者选择其他实现—您可以在同一链接中找到类似的解决方案


是的,回答得很好!在回调中,我认为您应该切换两行:首先确定下一个标签,然后使用它。这取决于表单是否以至少一个选项开头。我认为没有选择,所以木材可能是第一个使用的标签。我存储了要在下一个\u标签中使用的标签,所以使用后会增加它。很抱歉,我忽略了下一个\u标签是全局定义的。嘿,谢谢回复。另一个简单的问题,如果我想用罗马数字作为标签名怎么办@Pablo@Pablo,我试过你的建议。标签名称在追加时已更改。但是,标签名称不能正常工作。例如,第一个标签名为II,随后的标签名为IV。你知道这是什么原因吗?
$(document).ready(function() {

  var next_label = 1;

  function romanize(num) {
    var lookup = { M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1};
    var roman = '';
    var i;
    for ( i in lookup ) {
      while ( num >= lookup[i] ) {
        roman += i;
        num -= lookup[i];
      }
    }
    return roman;
  };

  $('#options').on('cocoon:after-insert', function(e, added_option) {
    added_option.find("label").first().text(romanize(next_label)+":");
    next_label++;
  });

});