如何停止用户配置文件的路由与ruby on rails上的其他路由冲突?

时间:2012-01-08 01:11:57

标签: ruby-on-rails ruby ruby-on-rails-3 rubygems ruby-on-rails-3.1

如何阻止这两条路线发生冲突:

  match "users/:id/edit", :to => "users#edit", :via => :get, :as => :settings
  match '/:username', :controller => 'users', :action => 'show'

当我访问localhost:3000 / settings时,它会尝试使用用户名“settings”在我的users表中查找用户。

我打算做的是设置页面设​​置,然后设置设置/隐私,设置/常规以及edit_profile

我怎么能拥有这个,但仍然可以访问用户localhost:3000 / username

必须有可能,因为我已经看到很多ROR网站这样做。

亲切的问候

1 个答案:

答案 0 :(得分:2)

此处的设置路线指向用户编辑路径。 使用settings_path将指向users /:id / edit

你想要的是:

match "/settings", :to => "users#settings"
match "/settings/:category", :to => "users#settings"
match '/:username', :controller => 'users', :action => 'show'

现在'/ settings'将引导您进入设置方法。第二个附加路径将处理路由到的特定设置(即/ settings / privacy),这将允许您根据设置操作中可用的参数[:category]参数评估视图中的操作。或者,这将提供隐私设置路径:

match "/settings", :to => "users#settings"
match "/settings/privacy", :to => "users#settings", :as => :privacy_settings
match '/:username', :controller => 'users', :action => 'show'

不需要:as语句,settings_path仍然有效。然后在UsersController的settings方法中,您可以使用会话信息(current_user)来呈现正确的用户。

RESTful编辑路径将通过路径文件中的此语句处理并可用:

resources :users

所以'users /:id / edit'仍然可以使用。