Rails Jquery-ui自动完成与嵌套属性

时间:2017-11-16 17:31:20

标签: jquery ruby-on-rails jquery-ui autocomplete

我正在尝试使用自动完成功能,以便用户尝试在适当的轨道表单中输入车牌号码。我一直在通过easyautocomplete和jquery-ui自动完成。但是似乎无法让它们中的任何一个工作,因为license_number属性是一个嵌套属性,我找不到将它全部关联起来的方法。

permit.rb

class Permit < ApplicationRecord
self.primary_key = :permit_id
has_one :vehicle
accepts_nested_attributes_for :vehicle

vehicle.rb

class Vehicle < ApplicationRecord
self.primary_key = :vehicle_id
belongs_to  :permit, optional: true

许可表格

<%= form_with(model: permit, local: true) do |form| %>
...
<div class="field">
  <%= form.fields_for :vehicle do |f| %>
    <%= f.label :license_number %>
    <%= f.text_field :license_number %>
  <% end %>
</div>
...

车辆模型具有名为license_number的属性。如何从该模型中获取所有许可证编号并将其关联起来以便我可以使用自动完成功能?

修改

permits.coffee

jQuery ->
$('#vehicle_license_number').autocomplete
    source: vehicle.collect( |car| [car.license_number, car.vehicle_id])

1 个答案:

答案 0 :(得分:0)

我已经发布了一些同样性质的答案,只是在JS而不是Rails。

基本上,让你自己搜索每个对象元素和数组。

  source: function(req, resp){
    var results = [];
    $.each(car, function(key, val){
      if(val.license_number.indexOf(req.term) == 0){
        results.push(val);
      }
    });
    resp(results);
  }

希望有所帮助。

如果你正在输入一个盘子的一部分,而不是数字的开头,你可以使它更像通配符:val.license_number.indexOf(req.term) >= 0