为什么这个自动完成字段不起作用?

时间:2011-03-29 09:51:11

标签: jquery ruby-on-rails ruby autocomplete

我正在尝试将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文件。

那么为什么文本字段没有显示自动完成结果?我错过了什么?

1 个答案:

答案 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

的js.erb文件

$("#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>