我正在使用Ransack gem为我的用户创建搜索表单。我选择使用他们在文档中提到的“高级”选项(here),页面列出了一组属性,谓词的下拉列表(<,>,==,等)和用于指定值的文本框。然后,用户可以根据需要添加更多条件。我的问题是,如何根据用户选择的属性设置值框?
例如,如果他们选择搜索模型的age
属性,我想给他们一个0到125或类似的下拉列表。
我计划使用jquery来确定用户选择的值,然后根据所选内容修改值框,但我不确定如何识别表单选择框来执行此操作。它包含随机生成的值,例如...... <select class="form-control" name="q[c][1450731292853][a][0][name]" id="q_c_1450731292853_a_0_name">
编辑:忘了这里是我的链接,它添加了一组新条件供搜索...
def link_to_add_fields(name, f, type)
new_object = f.object.send "build_#{type}"
id = "new_#{type}"
fields = f.send("#{type}_fields", new_object, child_index: id) do |builder|
render(type.to_s + "_fields", f: builder)
end
link_to(name, '#', class: "add_fields", data: {id: id, fields: fields.gsub("\n", "")})
end
答案 0 :(得分:0)
我设法通过执行以下操作解决了我的问题。如果你使用ransack,这个代码应该很好地适应“开箱即用”。如果你不使用 coffeescript ,我很抱歉。
attributes_for_true_false_select = [
'married'
'dog owner'
]
attributes_for_only_string = [
'first name'
'last name'
]
jQuery ->
$('select[name$="[name]"]').on 'change', ->
name_string = $(this).attr 'id'
selected_value = $("option:selected", this).text().toLowerCase()
value_id = $(this).attr('id').replace('name', 'value')
value_id = value_id.replace('a','v')
# if the selected value is for true/false control then...
if attributes_for_true_false_select.indexOf(selected_value) > -1
# Find the value box and change to a drop down for true/false
true_false_drop_down_list = '<select class="form-control" name="' + $('input[id=\''+value_id+'\']').attr('name') + '" id="' + ' $('input[id=\''+value_id+'\']').attr('id') + '"><option value="1">True</option><option value="0">False</option></select>'
$('#'+value_id).replaceWith(true_false_drop_down_list)
# if the selected value is for string control then...
else if attributes_for_only_string.indexOf(selected_value) > -1
# Find the value box and change to a text input box
text_box_control = '<input class="form-control" type="text" name="' + $('input[id=\''+value_id+'\']').attr('name') + '" id="' + $('input[id=\''+value_id+'\']').attr('id') + '">'
$('#' + value_id).replaceWith(text_box_control)
return