URL parameter in the URL itself instead of after ? in Rails
-
12-12-2019 - |
Question
I have the following line in the routes:
match 'area/:area_id/stores', :to => "stores_directory#index", :as => "stores_directory"
I have a form where I can select an area_id as:
<%= form_tag stores_directory_path, :method=>:get do %>
<select id="area_id" name="area_id">
....
</select>
This ads the area_id as a parameter after ?. So, my question is: How would I make it to add it in between area and stores?
Solution
I see one solution (not the best maybe, but also quite acceptable). It is possible to write your own middleware to handle this request, but this is the wrong way I believe (in this case).
Instead, use JS redirect
This could be written as a method (example using JQuery):
$('#area_id option').click(function() {
if (this.value) { // check value is not empty
document.location.href = Routes.stores_directory_path({area_id: this.value})
}
});
OR using options_for_select:
options = []
areas.each do |a|
options << [a.to_s, a.id, {:onclick => "document.location.href = Routes.stores_directory_path({area_id: #{a.id}})"}]
end
options_for_select(options)
Here I used js-routes gem for nice url's.
Hope this will be helpful.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow