Vue ax ios передать массив как параметр в Rails и обновить все (массовое редактирование) - PullRequest
1 голос
/ 20 января 2020

В моем Vue интерфейсе я установил этот метод:

bulkAction(selected) {
  this.$secured.patch('/api/v1/bulk_edit', {
     data: this.selected,
     sold: this.bulk_sold
  })
    .then((response) => {
    console.log(response.data)
});
    }

selected: [] - это массив объектов. sold - это логическое значение и атрибут в выбранных объектах массива.

Так, например, если значение true для true, я хочу установить значение true для всех объектов в массиве.

Имея это, я могу отправить на сервер массив объектов (данных) и проданных параметров.

В контроллере rails я установил этот метод:

def bulk_edit
    @item_locations = ItemLocation.where(params[:data])
    bulk_params = params.permit(:sold)
    @item_locations.each do |item_location|
      item_location.update(bulk_params)
    end
end

Какой возвращает:

NoMethodError (undefined method `update' for #<ActionController::Parameters:0x00007fa094596140>):

Я думаю, что это неправильная часть:

    @item_locations = ItemLocation.where(params[:data])

Но я не уверен, как преобразовать его.

Запрос выглядит :

    app/controllers/api/v1/items_controller.rb:47:in `bulk_edit'
Started PATCH "/api/v1/bulk_edit" for 127.0.0.1 at 2020-01-20 16:40:28 +0800
Processing by Api::V1::ItemsController#bulk_edit as HTML
  Parameters: {"data"=>[{"id"=>"44ed3183-cce2-4f3b-b673-6052d8cc5fe5"}, {"id"=>"ed7438dc-60ed-4887-bf86-90b6161c0074"}], "sold"=>false, "item"=>{}}

Есть предложения?

Ответы [ 2 ]

1 голос
/ 20 января 2020

В зависимости от того, что вы отправляете, вам нужно сначала отобразить, что идет внутри data, чтобы получить каждый идентификатор ItemLocation, чтобы вы могли сделать запрос IN:

ItemLocation
  .where(id: params['data'].map { |item_location| item_location['id'] })
  .update_all(sold: params['sold'])

После что вы можете использовать update_all для выполнения одного запроса для обновления каждого полученного вами ItemLocation, при этом стоимость проданного равна значениям в параметрах,

0 голосов
/ 20 января 2020

Пытался упростить это

def bulk_edit
    @item_locations = ItemLocation.where(id: params[:data]).update_all(params.permit[:sold])
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...