Итак, я только что обнаружил select2. Потрясающие. Теперь я пытаюсь понять, как его использовать, на стороне сервера с ajax/json. Все примеры, которые я вижу повсюду, показывают использование select2 с JSONP для извлечения данных из внешнего источника. Я чувствую, что это должно быть еще проще, если вы звоните из локальной модели, нет? Я доберусь до ничтожного песчаника. json возвращает значение, но поисковый запрос не автозаполняется, он остается пустым.select2 AJAX'd для модели, конфигурация
вид HTML:
<%= form_tag request_pal_path, remote: true do %>
<%= hidden_field_tag :email, nil, class: 'ui-corner-all' %>
<%= submit_tag "Send request", class: 'button' %>
<% end %>
и вызывая некоторые JS на нем:
$(document).ready(function() {
$("#find_user #email").select2({
width: '400px',
placeholder: "Find user...",
minimumInputLength: 1,
multiple: false,
id: function(obj) {
return obj.id; // use slug field for id
},
ajax: { // instead of writing the function to execute the request we use Select2's convenient helper
url: "/users",
dataType: 'json',
data: function (term, page) {
return {
q: term, // search term
page_limit: 10
};
},
results: function (data, page) { // parse the results into the format expected by Select2.
// since we are using custom formatting functions we do not need to alter remote JSON data
return {results: data};
}
},
formatResult: FormatResult,
formatSelection: FormatSelection,
escapeMarkup: function (m) { return m; }
});
})
function FormatResult(user) {
return '<div>' + user.name + '</div>';
}
function FormatSelection(user) {
return user.name;
}
, который идет к контроллеру, user index action
:
def index
@find = User.where('name LIKE ?', "%#{params[:q]}%")
@users = @find.where('id NOT IN (?)', current_user.id).order('random()').page(params[:page]).per(100)
@title = "Potential pals"
respond_to do |format|
format.html
format.js {
@find = @find
@users = @users
}
format.json { @find }
end
end
и я сделал файл .json для ответа (не уверен, что это даже необходимо):
<% @find.each do |user| %>
<%= user.name %>
<% end %>
Таким образом, json работает в определенной степени. Если я смотрю в консоли разработчика, он показывает ответ, исходящий от http://localhost:3000/users.json?q=tay
или whereever, и возвращает одно значение для Taylor
(в этом случае). Но когда я ищу внутри окна выбора select2, он просто вращается и вращается, без каких-либо результатов. Нет консольных ошибок, так что это хорошо, ха. Мысли? Благодаря!
это дает мне ошибку относительно отсутствующего шаблона. 'Отсутствуют пользователи/индекс шаблонов, application/index с {: locale => [: en],: formats => [: json],: handlers => [: erb,: builder,: coffee]}. Поиск: * ' – Dudo
это действительно так! Я пошел с вами двумя комбинациями ... format.json {render json: @find}. Я был так близок, LOL. – Dudo
Да, я забыл 'render json:', извините. Рад, что вы преуспели. –