从所选选项的模型中获取属性

Get attribute from model of selected option

我有一个列出所有员工的员工下拉列表。我希望能够 select 一名员工并从模型中获取员工的地址,以便我可以显示它。以下是我的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>

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

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

从这里我如何获取被 selected 的员工的地址?

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

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

有关详细信息,请查看此 link: https://guides.rubyonrails.org/working_with_javascript_in_rails.html

routes.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端点会将您的员工地址暴露给外部,因此请务必进行身份验证以防止泄露信息。

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

<%= 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");}

然后插入到需要的地方