我在Rails3.1应用程序中使用Railscast#102自动完成关联,我刚刚升级到3.2。
当我尝试将数据哈希添加到文本字段时
<%= f.text_field :category_name, data: {autocomplete_source: Category.order(:name).map(&:name)} %>
Rails生成一个编译错误,表示数据哈希有问题。
所以我把散列改写成
<%= f.text_field :category_name, 'data-autocomplete_source' => Category.order(:name).map(&:name)} %>
这是有效的,但有人能向我解释一下,这两种方法之间是否有任何区别,我应该意识到
其次,如果我用值的静态散列设置自动完成函数
$(function() {
$('#post_category_name').autocomplete({
source: ['foo', 'food', 'four']
});
});
自动完成可以工作。但是如果我使用数据散列:
$(function() {
$('#post_category_name').autocomplete({
source: $('#post_category_name').data('autocomplete_source')
});
});
自动完成不起作用?在控制台中,它返回
GET http://app.dev/post/4/foo%20food%20four?term=foo 404 (Not Found)
这让我很困惑,因为GET请求中有明显相关的术语。这是由于我调整了数据哈希,还是这里发生了其他事情?
谢谢你的想法或建议,帮助我了解这一切是如何运作的。
symbol: value
JavaScript ish Hash语法是1.9中的新语法,因此可以解释您的第一个问题。切换到1.9 Ruby或使用传统语法:
<%= f.text_field :category_name, :data => { :autocomplete_source => Category.order(:name).map(&:name) } %>
应该注意这一点。
检查生成的HTML,我认为数据属性将是data-autocomplete-source
而不是data-autocomplete_source
,所以试试这个:
$('#post_category_name').autocomplete({
source: $('#post_category_name').data('autocomplete-source')
});