2014-10-05 3 views
3

Я создаю приложение Ember.js, используя данные Ember, сериализатор ActiveModel и Ember Simple Auth Devise, подключаясь к API Rails и пытаясь понять, как я мог бы построить маршрут, который загружает один ресурс, в этом случае для страницы «моя учетная запись» для текущего пользователя.Ember.js найти один элемент без ID

С точки зрения Rails мне не нужен ID, но на стороне Ember я не уверен, как это сделать. Мое обходное решение заключалось в предоставлении идентификатора-заполнителя, который Rails игнорирует. Есть ли лучший способ сделать это?

ember.js:

MyAccountRoute = Ember.Route.extend(model: -> @store.find 'account', '1') 

Rails:

def show 
    @item = @current_user.account 
end 

ответ

0

Способ, которым я занимаюсь, - это вернуть массив/коллекцию записей, в которых содержится только одна запись.

Тогда в Ember вы можете получить доступ к этому единому результату, используя .get('firstObject') как этого

export default Ember.Route.extend({ 
    model: function() { 
    return this.store.find('user').then(function (users) { 
     return users.get('firstObject'); 
    }); 
} 
}); 

Это чувствует себя больше как способ Ember делать вещи, а также позволяет избежать проблемы, вы можете заметить, если вы используете Ember инструментов разработчика плагин ; То, что возвращенные данные фактически создают дублируемую запись - вы получаете пустую запись с идентификатором me или 1 и полную запись с идентификатором возвращенной единственной записи.

Альтернативный подход продолжается с использованием me или 1 и для установки или изменения идентификатора возвращенной записи для соответствия. В этом случае вы должны вернуть один объект, а не массив/коллекцию.

+0

Интересное решение спасибо! –

4

Ember данных имеет очень конкретную реализацию, когда вы используете найти

find вызывается с типом только ожидает, что коллекция тип, это соответствует findAll

find вызывается с типом и примитивным типом (не объект) будет ожидать одного ответа объекта этого типа, это отображается на findById

find называется с типом и объект будет ожидать коллекцию (возможно, фильтруются на сторону сервера с помощью параметры, отправленные в), это соответствует findByQuery

Так что, используя данные Ember Data, вы не можете это сделать, если вы не хотите взломать его в одну из ваших других реализаций или использовать ajax для перезвона и затем загружать хранилище , Я предпочитаю использовать шаблон, который вы используете, я делаю this.store.find('user', 'me'); И затем игнорирую параметр.

+0

Kingpin2k: спасибо за обратную связь! –

0

я объединил два ответы и использовали queryRecord с параметром игнорируется сервером.

return this.store.queryRecord('user_settings', {id: 'me'}); 

благодаря Binarytales и antulik

Смежные вопросы