为什么Rails3.1和3.2应用程序中的数据哈希返回编译错误



我在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')
});

最新更新