Javascript 在高级模式下,如何根据属性限制可搜索的搜索选项?

Javascript 在高级模式下,如何根据属性限制可搜索的搜索选项?,javascript,jquery,ruby-on-rails,ruby,ransack,Javascript,Jquery,Ruby On Rails,Ruby,Ransack,我正在使用RansackGem为我的用户创建一个搜索表单。我选择使用他们在文档()中提到的“高级”选项,页面列出了一组属性、谓词(、==等)的下拉列表,以及一个用于指定值的文本框。然后用户可以添加更多他们认为合适的条件。我的问题是,如何根据用户选择的属性设置值框 例如,如果他们选择搜索模型的age属性,我想给他们一个0到125或类似的下拉列表 我计划使用jquery来确定用户选择的值,然后根据选择的值修改值框,但我不确定如何识别表单选择框。它包含一个随机生成的值,例如 编辑:这里是我的链接,它添

我正在使用RansackGem为我的用户创建一个搜索表单。我选择使用他们在文档()中提到的“高级”选项,页面列出了一组属性、谓词(、==等)的下拉列表,以及一个用于指定值的文本框。然后用户可以添加更多他们认为合适的条件。我的问题是,如何根据用户选择的属性设置值框

例如,如果他们选择搜索模型的
age
属性,我想给他们一个0到125或类似的下拉列表

我计划使用jquery来确定用户选择的值,然后根据选择的值修改值框,但我不确定如何识别表单选择框。它包含一个随机生成的值,例如<代码>

编辑:这里是我的链接,它添加了一组新的条件以供搜索

  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

我通过以下方法解决了我的问题。如果您使用的是ransack,则此代码应该非常适合“开箱即用”。我很抱歉,如果你不使用咖啡脚本

attributes\u for\u true\u false\u select=[
“已婚”
“狗主人”
]
仅适用于\u的\u属性\u字符串=[
“名字”
“姓”
]
jQuery->
$('select[name$=“[name]”])。在'change'上,->
name\u string=$(this).attr'id'
selected_value=$(“选项:selected”,this).text().toLowerCase()
value_id=$(this.attr('id')。replace('name','value'))
value\u id=value\u id.replace('a','v'))
#如果所选值为真/假控制,则。。。
如果属性\u为\u真\u假\u选择.indexOf(选定值)>-1
#找到“值”框并更改为“真/假”下拉列表
true\u false\u下拉列表='TrueFalse'
$('#'+value_id).替换为(true_false_下拉列表)
#如果所选值用于字符串控制,则。。。
else如果属性\u仅用于\u字符串.indexOf(选定的\u值)>-1
#找到值框并更改为文本输入框
文本框控件=“”
$('#'+value_id).替换为(文本框控件)
返回
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