web-dev-qa-db-fra.com

Rails: URL / chemin avec paramètres

Je voudrais produire une URL comme

/swimming/students/get_times/2013-01-01/2013-02-02

de cette route

get_class_swimming_students GET /swimming/students/get_times/:start_date/:end_date(.:format) swimming/students#get_times

Comment passer des paramètres à get_class_swimming_students_path?

39
wwli
get_class_swimming_students_path('2013-01-01', '2013-02-02')

Dans Rails, les paramètres d'URL sont mappés au routeur dans l'ordre précis dans lequel ils sont transmis. Considérer ce qui suit:

# rake routes
my_route GET    /my_route/:first_param/:second_param/:third_param(.:format)

# my_view.html.erb
<%= link_to('My Route', my_route_path('first_param', 'second_param', 'third_param') %>
#=> <a href="/my_route/first_param/second_param/third_param">My Route</a>

Considérez également le cas suivant où foo et bar sont des paramètres statiques positionnés entre paramètres dynamiques:

# rake routes
my_route GET    /my_route/:first_param/foo/:second_param/bar/:third_param(.:format)

# my_view.html.erb
<%= link_to('My Route', my_route_path('first_param', 'second_param', 'third_param') %>
#=> <a href="/my_route/first_param/foo/second_param/bar/third_param">My Route</a>

Dans le dernier exemple, les arguments apparaîtront en tant que paramètres d'URL dans le ordre dans lequel ils ont été passés, mais pas nécessairement dans le même séquence.

MODIFIER:

La syntaxe suivante est équivalente au premier extrait. La principale différence est qu'il accepte les arguments en tant que paramètres nommés, plutôt que dans l'ordre dans lequel ils sont passés:

get_class_swimming_students_path(:start_date => '2013-01-01', :end_date => '2013-02-02')
46
zeantsoi

Pour tout chemin, vous pouvez transmettre des paramètres tels que

get_class_swimming_students_path(:params1 => value1, :params2 => value2)

Et dans le contrôleur, vous pouvez simplement accéder à ces paramètres passés comme d'habitude

24
Jyothu

Essayez de l'utiliser

get_class_swimming_students_path(:start_date => "2013-01-01", :end_date => "2013-02-02")
2
Sachin R

dans Rails 4, tapez moins avec:

get_class_swimming_students_path(params1: value1, params2: "value2")

où value1 est une méthode et value2 est une chaîne

0
Jerome

Vous pouvez également combiner des paramètres nommés et des paramètres non nommés comme ceci:

get_class_swimming_students_path('2013-01-01', '2013-02-02', gender: 'M')
0
Zhenya