2011-03-29 91 views
0

我试图使用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%') } 

这是在我的应用程序.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

你的where子句中有错字的报价,它是像在代码中一样? 'where(“name LIKE?',”%q%')}''应该是'where(“name LIKE?”,'%q%')}' – McStretch 2011-03-29 12:50:54

+0

yea ...仍然无法让它工作 – 2011-03-29 17:01:26

+0

在行$(“#genre_field”)。tokenInput(genres_path);'是脚本中变量中的genres_path? – McStretch 2011-03-29 17:07:04

回答

1

根据你的意见,我想我已经找出你的问题。在你的application.js您具备以下条件:

$("#genre_field").tokenInput(genres_path);

其中的DOM元素#genre_fieldgenres_path接收数据映射。但是,在您的JavaScript文件的上下文中不存在

genres_path。方法genres_path存在于ruby中,因为rails通过routes.rb生成该方法,而不是JS。为了解决这个问题,您需要提供相对路径genres_path代表你的JS代码:

$("#genre_field").tokenInput("/path/to/genres");

您需要建立某种形式的js.erb的文件,它利用了genres_path

$("#genre_field").tokenInput(<%= genres_path %>);

您可以添加一个内嵌的脚本来处理所有这些代码以类似的方式向js.erb文件的html.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> 
+0

很酷谢谢...你推荐哪一个? – 2011-03-29 19:06:38

+0

如果是我,我会选择第一个选择:'$(“#genre_field”)。tokenInput(“/ path/to/genres”);'在我的JS文件中。这很简单,不需要新的文件或嵌入在HTML中的脚本。话虽如此,你在JS中硬编码的路径不能直接链接到你的rails应用程序。因此,如果您以任何方式更改路径,都会出现错误,但您应该能够快速追踪它 - 特别是如果您使用Firebug等工具诊断问题。 – McStretch 2011-03-29 19:25:22

+0

我很困惑......我真的把它传递给''/ path/to/genres''? JS提供了这个路径? – 2011-03-29 20:20:12