У меня есть запись турнира, в которой много пулов. Я хотел бы иметь возможность генерировать пулы в angularjs, а затем, когда пользователи одобряют их, они отправляются на бэкэнд рельсов, который будет создан и сохранен в базе данных.
Мне трудно найти хорошее объяснение, как это сделать (я подозреваю, что не знаю, какой язык использовать в поиске).
В Routes.rb
resources :tournaments, only: [:create, :index, :show] do
resources :fencers, only: [:show, :create] do
end
resources :pools, only: [:show, :create, :destroy] do
end
collection do
put '/create_pools' => 'pools#create_pools'
end
end
В контроллере пулов
class PoolsController < ApplicationController
def create_pools
tournament = Tournament.find(params[:tournament_id])
tournament.pools.destroy_all # destroy existing pools.
params["pools"].each do |p|
tournament.pools.create(comment_params)
end
respond_with tournament, tournament.pools
end
private
def pool_params
#params.require(:pool).permit(:number, :strip, :fencers)
params.permit(:pool, array: [:number, :strip, :fencers])
end
end
В угловой службе
o.savePools = function(id, pools) {
return $http.post('/tournaments/' + id + '/create_pools.json', pools);
};
Я довольно смущен тем, как сделать несколько аспектов этого. 1) Как получить контроллер для получения коллекции пулов? Нужно ли передавать js как {пулы: [пул1, пул2 и т.д.]}? и тогда я бы получил доступ к нему через params ["pool"]?
2) Как сделать сильную печать с помощью коллекции? Я не уверен, какой правильный способ сильно набирать каждый отдельный пул в данной коллекции.
3) Если собственность "фехтовальщиков" сама по себе является другим объектом. Есть ли дополнительные изменения, которые мне нужны для этого?
Благодарю! Пожалуйста, дайте мне знать, если я могу что-то объяснить.
Я разработчик.net, но, возможно, общий совет может стать полезным для этой проблемы.
В ASP.Net MVC, если я отправляю коллекцию, как следующий код, она автоматически привязывает ее для меня к типизированному списку. обратите внимание, как пулы передаются в объекте параметра.
o.savePools = function(id, pools) {
return $http.post('/tournaments/' + id + '/create_pools.json', { "pools": pools });
};
Если бы у меня не было.net magical binding, тогда я бы послал сериализованную строку пулов, а затем на стороне сервера (ваш случай Ruby), я бы десериализовал эту строку
o.savePools = function(id, pools) {
return $http.post('/tournaments/' + id + '/create_pools.json', { "poolsJson": JSON.stringify(pools) });
};
Удачи!