0

У меня есть EmberJS фильтр так:EmberJS 2.7, Rails 5, AMS 0.10.2 - ПОЛУЧИ сбор ресурсов, где fieldX = [B или C]

/app/routes/trails/new.js

model: function (filterCurrentEmployees) { 
    return Ember.RSVP.hash({ 
     trail: this.store.createRecord('trail'), 
     employees: this.store.query('employee', { status: '1,2'}).then(
     function(data) {return data}) 
    }) 
    }, 

Я надеялся, что status: '1,2' бы в конечном итоге как обычный Rails пары, так что я мог бы сделать Params [: Status], а затем фильтровать возвращаемые сотрудник (вы знаете, так что дб получит запрос типа 'where status IN ['1','2']')

Но когда этот запрос фильтра отправляется в Rails API, я получаю эту ошибку:

ActiveModelSerializers::Adapter::JsonApi::Deserialization::InvalidDocument (Invalid payload ({:data=>"Expected hash"}): {"status"=>"1,2", "controller"=>"employees", "action"=>"index"}): 

, которая происходит здесь в контроллере:

апи/приложение/контроллеры/employees.rb

def employee_params 
    ActiveModelSerializers::Deserialization.jsonapi_parse!(params) 
end 

но что необходимо для AMS для работы с Эмбер.

Так что я предполагаю, что что-то не так с тем, как я отправляю/создаю запрос в EmberJS?

Кажется, что вы пытаетесь сделать запрос на получение GET. Не уверен, что действительно, и this объясняет, что происходит в конце Rails, но я не знаю, как заставить Ember правильно создать фильтр, чтобы AMS рада принять его.

EDIT - JSON-API Spec Reference

Я был под впечатлением, что AMS и угасающий 2,7 с JSON-API 'просто работать из коробки'. Я фактически ожидал фильтр Ember соблюдать the spec и отправить

/сотрудников? Фильтр = состояние [1,2]

, но это, кажется, не делать этого. AMS говорит то же самое here.

UPDATE

Так с некоторыми указателями с комментариями (спасибо) я узнал, что структура хэш-запроса может быть неправильным. Я также попытался изменить «запрос» на filter, но затем повышает фактическую ошибку Ember:

API фильтра перенесен в плагин. Чтобы включить store.filter с использованием флага среды или использовать альтернативу, вы можете посетить страницу аддона-фильтра фильтра данных.

Теперь я не знаю, какая разница между запросом Ember и фильтром Ember, возможно, фильтр работает только на клиенте? Кто знает, docs are so sparse и так много вопросов на это 1 или 2 года.

+0

Я думаю, что спецификация говорит? Filter [status] = 1,2. Вы пробовали исправить свой запрос, чтобы он соответствовал спецификации для начинающих? Почему вы считаете, что ALL queryparams следует фильтровать? – user2105103

+0

Спасибо, но я не знаю, о чем вы говорите, я новичок во всем этом – rmcsharry

+0

Мне не нужны ВСЕ сотрудники. Я хочу подмножество, где status = 1,2. Разве это не ясно из вопроса? – rmcsharry

ответ

0

Итак, после многократного копания для Ember Gold Nuggets, я узнал, что контроллеры STILL необходимы ... вы уже догадались ... Параметры запроса.

Я никогда не пользовался Контроллером и думал, что он мне никогда не нужен.

Похоже, я основывался на попытке использовать параметры запроса на устаревшей информации и примерах кода.

Для тех, кто сталкивается с этим, золотые самородки here и here.

Кроме того, кажется, что параметры Javascript Object по спецификации JSON-API еще не поддерживаются в Ember, согласно this, хотя это почти год, поэтому не знаю, действительно ли это так.

UPDATE

Так, после дальнейшей добычи золота, кажется, я был смущен, и что контроллеры необходимы для Параметры запроса в Ember на стороне клиента, чтобы помочь приложению во внешнем интерфейсе, когда он переходит от одного маршрута к другой (и тогда вам нужен контроллер для их настройки).

Но я хочу просто отправить параметр запроса из кода маршрута непосредственно в API, и примеры этого очень трудно найти.

Так в Rails Вход Я хотел бы ожидать, чтобы увидеть ПЕРЕД десериализации АНМ:

Rails.logger.info "Params are: #{params.to_json}" 

что-то вроде этого:

Params are: 
{"data":{"filter":{"status["1,2"]}}, 
"controller":"employees","action":"index"} 

ASM ожидает «данные», чтобы быть корневой элемент хэша , а затем внутри, что я могу разместить свой фильтр. Например, из маршрута Ember:

model: function() { 
    let myFilter = {}; 
    myFilter.data = { filter: {status: ['1,2']}}; 
    return Ember.RSVP.hash({ 
     trail: this.store.createRecord('trail'), 
     employees: this.store.query('employee', myFilter).then(function(data) {return data}) 
    }) 
    }, 

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

  • Нет связанных вопросов^_^