Rails:带参数的URL /路径

wwl*_*wli 41 ruby ruby-on-rails ruby-on-rails-3

我想生成一个URL作为

/swimming/students/get_times/2013-01-01/2013-02-02
Run Code Online (Sandbox Code Playgroud)

从这条路线

get_class_swimming_students GET /swimming/students/get_times/:start_date/:end_date(.:format) swimming/students#get_times
Run Code Online (Sandbox Code Playgroud)

如何将参数传递给get_class_swimming_students_path

zea*_*soi 48

get_class_swimming_students_path('2013-01-01', '2013-02-02')
Run Code Online (Sandbox Code Playgroud)

在Rails中,URL参数按照传递的精确顺序映射到路由器.考虑以下:

# 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>
Run Code Online (Sandbox Code Playgroud)

还要考虑以下情况,其中foobar是静态参数位于动态参数之间:

# 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>
Run Code Online (Sandbox Code Playgroud)

在最后一个示例中,参数将按照传递顺序显示为URL参数,但不一定在同一序列中.

编辑:

以下语法等同于第一个代码段.主要区别在于它接受参数作为命名参数,而不是按照它们传递的顺序:

get_class_swimming_students_path(:start_date => '2013-01-01', :end_date => '2013-02-02')
Run Code Online (Sandbox Code Playgroud)


Jyo*_*thu 24

对于任何路径,你都可以通过params

get_class_swimming_students_path(:params1 => value1, :params2 => value2)
Run Code Online (Sandbox Code Playgroud)

在控制器中,您可以像往常一样简单地访问那些传递的参数


Zhe*_*nya 5

您还可以组合命名参数和非命名参数,如下所示:

get_class_swimming_students_path('2013-01-01', '2013-02-02', gender: 'M')
Run Code Online (Sandbox Code Playgroud)