2016-02-02 3 views
1

Из того, что я узнал, исследуя эту проблему и создавая пользователей с нуля, не изобретая. Разве что Devise не принимает запрос [GET], и я не могу получить доступ к модели пользователя, используя JSON. Кто-нибудь реализовал решение, которое включает в себя At.js и Devise вместе? Как подключить модель пользователя к @Mentions symbol для JS component?Использование At.JS @Mentions with Devise [Ruby on Rails 4]

ОБНОВЛЕНО для изменений, внесенных с помощью @Seichleon.

atwho-post.coffee

jQuery -> 
    $('[data-mentionable]').atwho({ 
    at: "@", 
    data: '<%= mentionables_path %>', 
    insertTpl: '${username}', 
    displayTpl: '<li data-id="${id}"><span>${username}</span></li>', 
    limit: 10, 
    }); 

пост _form.html.erb (Ожидание данных атрибута)

<%= f.text_area :body, maxlength: @maximum_length, id: 'body', data: {behavior: 'autocomplete'} %> 
+0

Разрабатывают не дает вам действие контроллера вы хотите, но он принимает запросы GET/JSON. Вам просто нужно создать собственный пользовательский контроллер для поддержки требуемого запроса. – Leito

+0

Хорошо, я создам json-метод внутри пользовательского устройства Users_Controller.rb, чтобы получить пользователей в json-форме. –

+0

Нет необходимости в том, чтобы он был настраиваемым контроллером. Первоначально не существует пользовательского контроллера, поэтому сделайте этот контроллер своим. – Leito

ответ

1

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

Добавить маршрут:

get 'share/users', as: :mentionables 

Добавить фактическое действие к контроллеру: (в моем случае, контроллер будет контроллер доли)

class ShareController < ApplicationController 
    def users 
     render json: User.all, root: false 
    end 
end 

Теперь, когда вы посещаете share/users вас должен получить что-то подобное взамен:

[ 
    { 
     "id":2, 
     "email":"[email protected]", 
     "name": "sergio", 
     ... 
    }, 
    ... 
] 

С этим вы может настроить at.js следующим образом:

$('[data-mentionable]').atwho({ 
    at: '@', 
    data: '<%= mentionables_path %>', 
    insertTpl: '${name}', 
    displayTpl: '<li data-id="${id}"><span>${name}</span></li>', 
}); 

и при этом он должен указывать пользователей, основанных на их именах.

+0

Очень приятно. Я попробую этот подход. –

+0

Выпадающий список не отображается в представлении _form. Я выполнил все ваши шаги и перезапустил сервер, чтобы убедиться в обновлении конвейера активов. Какой элемент данных вы используете в представлении для атрибута body:? Вы можете добавить строку к вашему ответу <% = f.text_area: body, maxlength: @maximum_length, id: 'body', data: {behavior: 'autocomplete'}%> и т. Д. –

+0

Я получаю NameError undefined local переменная или метод для некоторых атрибутов внутри share_controller.rb. Который является результатом моих вложенных атрибутов, связанных с моделью пользователя. –

1

Сообщение _form.html.erb вид

<%= f.text_area :body, maxlength: @maximum_length, id: 'body', data: {behavior: 'autocomplete'} %> 

atwho-post.coffee

jQuery -> 
    $('[data-behavior="autocomplete"]').atwho({ 
    at: "@", 
    data: "/share/users.json", 
    insertTpl: '${username}', 
    displayTpl: '<li data-id="${id}"><span>${username}</span></li>', 
    limit: 15, 
    }); 
+0

HOw я бы выделил это в представлениях как ссылку на упомянутого пользователя? –