Rails has a built in notation to pass arrays through the query string.
Started GET "/users?ids[]=1&ids[]=2&ids[]=3" for ::1 at 2016-08-19 12:08:42 +0200
Processing by UsersController#index as HTML
Parameters: {"ids"=>["1", "2", "3"]}
When you use some_key[]=1&some_key[]=2 notation Rails will merge all the some_key parameters into an array.
Passing a array to the path helper will generate the correct request URL.
irb(main):012:0> app.users_path(ids: [1,2,3])
=> "/users?ids%5B%5D=1&ids%5B%5D=2&ids%5B%5D=3"
# for clarity
irb(main):013:0> CGI.unescape app.users_path(ids: [1,2,3])
=> "/users?ids[]=1&ids[]=2&ids[]=3"
Using JSON.parse is just masking a bug in your application with a hacky fix.
What is most likely going wrong in your case is that the input to users_path(ids: some_variable) is a string and not an array as expected.
irb(main):014:0> CGI.unescape app.users_path(ids: "[1,2,3]")
=> "/users?ids=[1,2,3]" # this will not be treated as an array!