rails3-jquery-autocomplete: показать изображение в списке результатов? - PullRequest
1 голос
/ 30 октября 2011

Я использую драгоценный камень rails3-jquery-autocomplete, найденный здесь . Я запрашиваю таблицу пользователей и хотел бы, чтобы в раскрывающемся списке отображалось изображение профиля пользователя рядом с именем.У меня есть модель User и полиморфная модель Image.Каждый пользователь :has_one изображение.В модели изображений я использую скрепку для прикрепления изображений, обозначаемых в модели как pic.

В документации по самоцвету rails3-jquery-autocomplete говорится, что я могу указать :display_valueв контроллере.Я использую эту технику, и она отлично работает;то есть у меня был собственный метод для возврата значения, и оно возвращено правильно.Этот пользовательский метод находится в модели User согласно правильной настройке драгоценного камня.Что я хотел бы сделать, это вернуть :tiny версию изображения пользователя и отобразить его слева от имени в раскрывающемся списке.Следующий метод отображения работает нормально:

def autocomplete_list_display
    "#{full_name}"
end

Я пытался сделать следующее:

def autocomplete_list_display
    i = self.image
    "#{image_tag(i.pic(:tiny))}" + " #{full_name}"
end

Я получаю сообщение об ошибке

NoMethodError (undefined method 'image_tag' for #<User id: 4, full_name: "My Name">):

Если я опускаючасть image_tag(), тогда URL изображения отображается правильно.Однако я не могу заставить его отображаться как визуализированный HTML, даже используя для этого метод .html_safe.Обратите внимание, я также попробовал следующее, но он не отображался как HTML:

def autocomplete_list_display
    i = self.image
    "<img src='#{i.pic(:tiny)}' />"
end

Как мне написать метод :display_value..., который позволит мне встраивать HTML в результаты и показывать изображение пользователя следующимна имя?Это можно сделать с помощью метода, или это должно быть сделано в JavaScript?(В последнем случае, как мне изменить файл .js, чтобы показать изображение?)

1 Ответ

2 голосов
/ 16 марта 2012

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

Если вы включите это расширение в свой проект, вы можете установить для параметра автозаполнения html значение true для поля автозаполнения:

$( ".selector" ).autocomplete({ html: true });

Тогда все, что возвращает функция display_value, будет отображаться как HTML.

...