Я разобрался, как добавить / удалить элемент в / из ассоциации.Так что на стороне Ember это выглядит так:
actions: {
deleteLanguage(language) {
let controller = this.get('controller');
let country = controller.get('aCountry');
country.get('languages').removeObject(language);
country.set('modifiedBy', this.get('currentUser.user').get('username'))
country.save();
},
saveLanguage(language) {
let controller = this.get('controller');
let country = controller.get('aCountry');
country.get('languages').pushObject(language);
country.set('modifiedBy', this.get('currentUser.user').get('username'))
country.save();
}
А на стороне Rails все происходит в CountriesController
:
class CountriesController < ApplicationController
...
def update
if @country.update(country_params)
json_response @country
else
json_response @country.errors, :unprocessable_entity
end
end
private
def find_country
@country = Country.includes(:languages).find(params[:id])
end
def country_params
ActiveModelSerializers::Deserialization.jsonapi_parse!(params,
only: [
:id,
:modified_by,
:languages
])
end
end
Конечно, мне придется добавить несколько ошибокобработка на Ember стороне только для отображения подтверждения обновления или ошибок.
Метод json_response
- это просто мой пользовательский помощник, определенный в concerns
для контроллеров следующим образом:
module Response
def json_response(object, status = :ok, opts = {})
response = {json: object, status: status}.merge(opts)
render response
end
end
Надеюсь, это поможет.Вы можете найти больше о модовых отношениях в Ember Guide .