Почему хэш данных возвращает ошибку компиляции в приложении Rails 3.1 и 3.2? - PullRequest
0 голосов
/ 22 февраля 2012

Я возился с Railscast # 102 Auto-Complete Association в приложении Rails 3.1, которое я только что обновил до 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 есть явно связанные термины. Это из-за того, что я настроил хэш данных, или здесь что-то еще происходит?

Спасибо за ваши идеи или предложения, чтобы помочь мне узнать, как все это работает.

1 Ответ

1 голос
/ 22 февраля 2012

Синтаксис symbol: value JavaScript-хэша впервые введен в 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')
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...