我正在尝试将this autocomplete field与一组预先填充的类型一起使用。
类型与个人资料有一个has_and_belongs_to_many关联。
我的路线中有这个:
resources :profiles
resources :genres
这是我的流派控制器:
respond_to :html, :json
def index
respond_with(@genres = Genre.search(params[:q]))
end
这是我的类型模型:
has_and_belongs_to_many :videos
has_and_belongs_to_many :profiles
scope :search, lambda {|q| where("name LIKE ?", '%q%') }
这是我的application.js:
$("#genre_field").tokenInput(genres_path);
这是我的个人资料编辑视图:
<%= f.fields_for :genre do |g| %>
<div class="field">
<%= g.label :name, "Genres" %><br />
<%= g.text_field :name, :id => 'genre_field' %>
</div>
<% end %>
我已经使用一组流派预先填充了类型表,并且我包含了jquery.tokeninput.js
和CSS文件。
那么为什么文本字段没有显示自动完成结果?我错过了什么?
答案 0 :(得分:1)
根据您的评论,我想我已经找到了您的问题。在您的application.js中,您有以下内容:
$("#genre_field").tokenInput(genres_path);
映射DOM元素#genre_field
以接收来自genres_path
的数据。
genres_path
在JavaScript文件的上下文中不存在。方法genres_path
存在于ruby中,因为rails通过routes.rb而不是JS生成该方法。为了解决这个问题,您需要提供genres_path
在JS代码中表示的相对路径:
$("#genre_field").tokenInput("/path/to/genres");
或强>
您需要创建一些使用genres_path
:
$("#genre_field").tokenInput(<%= genres_path %>);
或强>
您可以在html.erb文件中添加内联脚本,该文件以与js.erb文件类似的方式处理所有这些代码:
<%= f.fields_for :genre do |g| %>
<div class="field">
<%= g.label :name, "Genres" %><br />
<%= g.text_field :name, :id => 'genre_field' %>
</div>
<% end %>
<script>
$("#genre_field").tokenInput(<%= genres_path %>);
</script>