带有参数的铁路更好的路线

时间:2015-11-28 13:14:47

标签: ruby-on-rails ruby

我一直在研究Rails中的电影应用程序。我有一个演员的控制器/视图。当将params传递给actor控制器时,我希望URL非常漂亮。现在它看起来像这样:http://localhost:3000/actors/show?actor=Hayley+Atwell我希望它看起来像/actors/show/Hayley+Atwell/actors/Hayley+Atwell

我该怎么做?我在电影视图中的链接是:

<%= link_to a.name, {:controller => 'actors', :action => 'show', :actor => a.name}, :class => "label label-default" %>

我的routes.rb现在是这样的:

get 'actors/show'

4 个答案:

答案 0 :(得分:1)

我建议你使用friendly_id gem。它完全满足您的需求!

https://github.com/norman/friendly_id

答案 1 :(得分:0)

您可以在./config/route.rb文件中使用以下内容:

get '/actors/:actor', to: 'actors#show'

答案 2 :(得分:0)

我将提供一系列重构建议如下:

  • 尝试使用actor的id而不是名称
  • 将路线更改为:get&#39; / actors / show /:id&#39;,to:&#39;演员#show&#39;

然后,您现在可以将视图中的链接更改为:

<%= link_to a.name, {:controller => 'actors', :action => 'show', :id => a.id}, :class => "label label-default" %>
  

注意:路线:中的:id部分意味着它可以与任何东西互换,而且该地方的任何内容都将被解释为id。因此,在/actors/show/7中,actor的id为7,您现在可以在控制器操作中找到具有此id的actor,并使用它执行任何操作。

答案 3 :(得分:0)

如果我是对的,你还是试着创建RESTful路线。

所以我建议您在路线中使用Rails' resources method

Rails.application.routes.draw do
  resources :actors   # If you want only the :show action than add:
                      # , only: [:show]
end

这会自动为您创建合适的路线。

要将names放入网址,您应该使用friendly_id gem。它有一个很棒的社区,并且经过了很好的测试。