jquery-ui自动完成与simpleform

时间:2017-03-08 22:54:21

标签: jquery ruby-on-rails autocomplete simple-form

我只是花了一些时间来处理这个问题,如果我这样做了,也许别人也会这样做。所以我只是提出问题然后回答......

我在Rails 5上运行并尝试干掉我的代码,并从form_for更改为simple_form_for。

使用form_for,我设法通过遵循此tutorial并解决turbo-links问题来获得自动完成工作。

并且: 在_form.html.erb下     ...

<div class="form-group">
  <%= f.label :cae_id, class: "col-md-5 control-label" %>
  <div class="col-md-7">
    <%= f.text_field :cae_codenr, data: { autocomplete_source: index_autocomplete_caes_path, remote: true} %>
  </div>
</div>

...

和companies.coffee

$(document).on 'turbolinks:load', ->

  jQuery ->
    $('#company_cae_codenr').autocomplete source: $('#company_cae_codenr').data('autocomplete-source') 
  jQuery ->
    $('#user_company_attributes_cae_codenr').autocomplete source: $('#user_company_attributes_cae_codenr').data('autocomplete-source')

和我的caes_controller:

def index_autocomplete
   @caes = Cae.order(:codenr).where("codenr like ?", "%#{params[:term]}%")

   render json: @caes.map(&:codenr)
end

和我的公司.rb

...
  def cae_codenr
    cae.try(:codenr)
  end

  def cae_codenr=(codenr)
    self.cae = Cae.find_by(codenr: codenr) if codenr.present?
  end
...

当我改变时

  <div class="form-group">
    <%= f.label :cae_id, class: "col-md-5 control-label" %>
    <div class="col-md-7">
      <%= f.text_field :cae_codenr, data: { autocomplete_source: index_autocomplete_caes_path, remote: true} %>
    </div>
  </div>

匹配的HTML代码:

  <div class="form-group">
    <label class="integer required col-md-5 control-label" for="company_cae_id">
       <abbr title="required">*</abbr> 
       Cae
    </label>
    <div class="col-md-7">
       <input data-autocomplete-source="/caes/index_autocomplete" data-remote="true" type="text" name="company[cae_codenr]" id="company_cae_codenr" />
    </div>
  </div>

<%= f.input :cae_codenr, data: { autocomplete_source: index_autocomplete_caes_path, remote: true} %>

使用以下HTML

   <div class="input string optional company_cae_codenr">
    <label class="string optional" for="company_cae_codenr">Cae codenr</label>
     <input class="string optional" type="text" name="company[cae_codenr]" id="company_cae_codenr" />
   </div>

当我开始在输入中输入数字时,我得到了

  

this.source不是函数

错误

所以...我已经找到了关于jquery和simpleform的解决方案,还有这个错误消息,但是没有任何直接的解决方案似乎在这里工作......

1 个答案:

答案 0 :(得分:1)

在我写这个问题的时候,实际上找到了这个解决方案,并决定粘贴html源代码。

所以这里有一个很重要的教训是当一个人知道一些有用的东西时会进行调试,并且应该做一些类似的东西不起作用。

一旦我比较了两个html代码,我就注意到数据自动完成属性没有以简单的形式发送。然后问题就出现了:如何将数据属性传递给简单形式?

和voilá,stackoverflow有答案:https://stackoverflow.com/a/8332537/1461972,所以最后我最终得到了:

  <%= f.input :cae_codenr, input_html: {data: { autocomplete_source: index_autocomplete_caes_path}} %>