Если действие автозаполнения только рендерит JSON, вы можете упростить решение re5et до:
def autocomplete
questions = Question.all
render :json => questions
end
(обратите внимание, что я расшифровал 'вопрос', чтобы отразить, что это массив, и удалил символ @ - достаточно локальной переменной, поскольку вы, вероятно, используете ее только для рендеринга встроенного JSON)
Как своего рода дополнение, потому что я подозреваю, что люди могут попасть на эту страницу в поисках решения для плагина jquery ui autocomplete, рендеринг массива question
для JSON не будет работать. Плагин требует определенного формата, как описано здесь :
Локальные данные могут быть простым массивом строк или содержать объекты для каждого элемента в массиве со свойством метки или значения или обоими. Свойство метки отображается в меню предложений. Значение будет вставлено в элемент ввода после того, как пользователь выберет что-то из меню. Если указано только одно свойство, оно будет использоваться для обоих, например. если вы укажете только значение-свойства, значение также будет использоваться в качестве метки.
Когда используется строка, плагин автозаполнения ожидает, что эта строка будет указывать на ресурс URL, который будет возвращать данные JSON. Это может быть на том же хосте или на другом (должен предоставить JSONP). Параметр запроса "term" добавляется к этому URL. Сами данные могут быть в том же формате, что и локальные данные, описанные выше.
Другими словами, ваш json должен выглядеть примерно так (в простейшем виде):
[{'value': "Option1"},{'value': "Option2"},{'value': "etc"}]
Вы можете сделать это в ruby следующим образом:
def autocomplete
questions = Question.all # <- not too useful
questions.map! {|question| {:value => question.content}}
render :json => questions
end
Я не проверял это, так как у меня нет удобного устройства для разработки. Я подтвердлю через несколько часов.
UPDATE:
да, это работает!
ОБНОВЛЕНИЕ 2:
Новый способ рельсов сделать это (добавлен в рельсы 3.1) будет:
class MyController < ApplicationController
respond_to :json
# ...
def autocomplete
questions = Question.all # <- not too useful
questions.map! {|question| {value: question.content}}
respond_with(questions)
end
end