带有嵌套属性的 Rails Jquery-ui 自动完成

Posted

技术标签:

【中文标题】带有嵌套属性的 Rails Jquery-ui 自动完成【英文标题】:Rails Jquery-ui autocomplete with nested attribute 【发布时间】:2018-04-30 08:33:12 【问题描述】:

当用户尝试将车牌号输入到相应的导轨表单中时,我正在尝试使用自动完成功能。我一直在经历 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])

【问题讨论】:

请提供用于自动完成的 javascript 代码。您很可能需要将source 用作函数,您可以在其中自定义搜索嵌套元素与顶部元素。还包括数据示例。 忘记了。我试着先做一个标准数组,我什至无法让自动完成显示在 license_number 字段中。我可以在不同的字段中,但它们不是嵌套的属性字段。 【参考方案1】:

我已经发布了一些性质相同的答案,只是在 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) &gt;= 0

【讨论】:

以上是关于带有嵌套属性的 Rails Jquery-ui 自动完成的主要内容,如果未能解决你的问题,请参考以下文章

带有has_many的Rails嵌套表单:通过,如何编辑连接模型的属性?

Rails 使用 JSON 将深度嵌套属性到 Vue 实例

Rails - 更新单个属性:与自定义操作或带有隐藏字段的表单链接?

由于多列上的唯一索引,无法更新 Rails 中的父记录和嵌套记录

Rails 3.1 和 jquery-ui 资产

带有视图测试和嵌套资源的 Rspec 和 Rails