我使用cocoon gem创建了一个带有嵌套属性的表单。单击link_to_add_association时,它将附加标签和text_field。但是,我希望标签名称是动态的,因为每个标签的标签名称都不同。例如,我想要' 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' %>
答案 0 :(得分:1)
假设您的嵌套字段位于div“#options”
中$(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);
});
});
修改强>
使用罗马数字:(取自:https://stackoverflow.com/a/32851198/3372172)。 注意即可。 有评论说这不起作用,因为对象没有订单。您应该测试它,或选择其他实现(您可以在同一链接中找到类似的解决方案)。
$(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++;
});
});