包含动态段

时间:2017-01-04 15:04:00

标签: ruby-on-rails ruby ruby-on-rails-4

我的Rails应用程序中有以下两条路线:

match '/users/:username' => 'users#show', :via => :get, :as => :user
match '/users(/:filter)' => 'users#index', :via => :get, :as => :users

这样我就可以拥有以下路线:

/users/cameron /users/popular

第一个是用户,第二个是过滤器。

然而,Rails中的路由将始终到达第一条路线,因为它不知道:username:filter之间的区别。

对于帖子,我通过这样做来避免这个问题:

match '/posts/:id' => 'posts#show', :via => :get, :as => :post, :id => /[0-9]/

但这只能起作用,因为帖子总是整数。例如:/posts/21

如何将约束应用于我的用户路由,以便它们不会相互跳过,也不必为其中任何一个添加前缀。

1 个答案:

答案 0 :(得分:0)

我尝试过这种方法(基于@Mario提供的链接

match '/users/:username' => 'users#show', :via => :get, :as => :user, :constraints => lambda { |request| User.usernames.include?(request.params[:username]) }

在我的用户模型中:

def self.usernames
  User.pluck(:username)
end