0

我有一个列出所有员工的员工下拉列表。我希望能够选择一个员工并从模型中获取员工的地址,以便我可以显示它。以下是我的 collection_select 的代码。

<div class="form-group col-md-2 field">
<%= form.label :employee_id %>
<%= form.collection_select :employee_id, Employee.all, :id, :full_name,{:prompt=>"Select Employee"},{:id=>"emp_select",class:"form-control",:onchange=>"getEmployee();"} %>
</div>

接下来是我用来获取所选员工价值的代码,它确实有效。

function getEmployee() {
    var selectedVal=$('#emp_select option:selected').val();}

从这里我该怎么做才能获得被选中员工的地址?

4

2 回答 2

1

您必须通过ajax电话检索员工的地址。以下是步骤:

  1. 在您的 rails 应用程序中定义一个操作以通过json.
  2. 对该操作发出 ajax 请求并获取所需的信息。
  3. 将结果渲染到视图中。

有关更多信息,请查看此链接: https ://guides.rubyonrails.org/working_with_javascript_in_rails.html

路线.rb

controller :ajax do
  get 'ajax/get_employee_address/:employee_id', action: :get_employee_address, as: :get_employee_address
end

ajax_controller.rb

class AjaxController < ActionController::Base
  def get_employee_address
    employee = Employee.find(params[:employee_id])

    render json: employee.address.to_json
  rescue ActiveRecord::RecordNotFound
    render json: 'Employee not found', status: 422
  end
end

你的js代码

function getEmployee() {
  var selectedVal=$('#emp_select option:selected').val();
  $.ajax({
    url: '/ajax/get_employee_address/' + selectedVal,
    success: function (address) {
      // Render your address to view
    },
    error: function () {
      // Handle error here or just return nothing
      return null;
    }
  })
}

注意:此 ajax 端点会将您的员工地址暴露给外部,因此请务必进行身份验证以防止信息泄露。

于 2018-10-21T14:55:39.963 回答
0

将地址添加到选项数据属性:

<%= form.select :employee_id, 
  options_for_select(Employee.all.map { 
    |e| [e. full_name, e.id, { 'data-address' => e.address  }] 
  }), 
  { prompt: "Select Employee" }, 
  { id: "emp_select", class: "form-control", onchange: "getEmployee();" } %>

在更改时使用 js 获取它:

function getEmployee() {
  var selectedVal=$('#emp_select option:selected').data("address");}

并将其插入需要的地方

于 2018-10-21T16:17:12.967 回答