Sig
Sig

Reputation: 5950

Passing nested parameters to an ajax get request

In a Rails 5.1 app (without jQuery) how can I pass nested params via a GET ajax request?

I have the following

Rails.ajax({
  url: select.getAttribute('data-url') + "?xxx",
  type: "GET"
});

If I replace xxx with, for instance, pippo=pluto, in my controller

params[:name] #=> "pluto"

However, in my controller, I need to be able to access a nested param as below.

params[:user][:name] #=> "pluto"

It seems a simple problem but I cannot find a solution.

Here my JS

  document.addEventListener('turbolinks:load', function() {
    var select = document.querySelector("select[name='user[name]']")
    if(select.options[select.selectedIndex].value) {

      Rails.ajax({
        url: select.getAttribute('data-url'),
        type: "GET",
        data: {
          user: {
            name: select.options[select.selectedIndex].value
          }
       }
      });
    }
  });

Which produces (user[:name] is always selected)

{"object Object"=>nil, "controller"=>"steps", "action"=>"index"} permitted: false>

The query string works fine (but is ugly)

Rails.ajax({
        url: select.getAttribute('data-url') + '?user[name]=' + select.options[select.selectedIndex].value,
        type: "GET"
      });

SIDE QUESTION: To avoid the ajax request in the first place is there an alternative way to automatically trigger the request of the select below when the page is loaded? Currently, it is triggered only when the selected option changes

<%= f.select :user, MyUsers.all,
{ data: { remote: true, url: duplicate_users_path } } %>

Upvotes: 0

Views: 1382

Answers (1)

ogelacinyc
ogelacinyc

Reputation: 1372

use data option in ajax (recommended)

Rails.ajax({
  url: select.getAttribute('data-url'),
  type: 'GET',
  data: {
    users: {
      pippo: 'pluto',
      pippo2: 'pluto2'
    }
  }
});

or query string as array

Rails.ajax({
  url: select.getAttribute('data-url') + '?users[pippo]=pluto&users[pippo2]=pluto2',
  type: 'GET'
});

Upvotes: 1

Related Questions