如何阻止这两条路线发生冲突:
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网站这样做。
亲切的问候
答案 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'仍然可以使用。