在动态选择菜单中查询

时间:2013-11-02 07:59:28

标签: ruby-on-rails ruby-on-rails-3 activerecord ruby-on-rails-3.2 simple-form

我有两个模型EmployeeEmployeeDepartment。我创建了一个动态选择菜单,因此当我选择一个部门时,它会根据该部门使用以下代码过滤员工simple_form

<%= f.input :employee_id , collection: @departments, as: :grouped_select, group_method: :employees, include_blank: false %>

注意:@departments = EmployeeDepartment.order(:name)

我想做的是:

在进行动态选择之前,我使用此代码来获取特定员工

<%= f.association :employee, :collection => @supervisors_list, :label_method => :full_name, :value_method => :id, include_blank: false  %>

请注意:@supervisors_list = Employee.where('guidance_supervisor' => true).order(:first_name)

guidance_supervisors.js.coffee

jQuery ->
  $('#guidance_supervisor_employee_id').parent().hide()
  employee = $('#guidance_supervisor_employee_id').html()
  $('#guidance_supervisor_employee_department_id').change ->
    department = $('#guidance_supervisor_employee_department_id :selected').text()
    escaped_department = department.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, '\\$1')
    options = $(employee).filter("optgroup[label='#{escaped_department}']").html()
    if options
      $('#guidance_supervisor_employee_id').html(options)
      $('#guidance_supervisor_employee_id').parent().show()
    else
      $('#guidance_supervisor_employee_id').empty()
      $('#guidance_supervisor_employee_id').parent().hide()

添加动态选择后,我无法使用@supervisors_list使菜单获取所有员工。我需要能够再次使用@supervisors_list,有没有办法实现这一目标?

2 个答案:

答案 0 :(得分:0)

您需要使用Gon之类的内容。它具有watch功能,可以帮助重新加载数据而无需重新加载页面see here

您的代码问题只是它过滤页面而不重新加载它。所以基本上是@supervisors_list构建的服务器端,你可以:

  1. 使用ajax方法从服务器获取新的过滤的@supervisor_list(gon watch或直接使用jQuery .ajax
  2. @supervisor_list数据添加到您的网页javascript中,并在部门过滤后过滤(也可以通过gon或read this railscast

答案 1 :(得分:0)

有一种简单的方法可以实现相同的功能。

https://gist.github.com/romansklenar/3077281

这可以帮助您解决问题。