【问题标题】:How do I stop routes for user profile conflicting with other routes in ruby on rails?如何停止用户配置文件的路由与 ruby​​ on rails 中的其他路由冲突?
【发布时间】:2012-01-08 01:11:57
【问题描述】:

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

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

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

我打算做的是有一个页面设置,然后有设置/隐私、设置/常规和编辑配置文件之类的东西

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

这一定是可能的,因为我见过很多 ROR 网站都在这样做。

亲切的问候

【问题讨论】:

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


    【解决方案1】:

    您在此处的设置路径指向用户编辑路径。 使用 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),这将允许您根据设置操作中可用的 params[: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 的设置方法中,您可以使用会话信息(current_user)来呈现正确的用户。

    RESTful 编辑路径将通过您的路由文件中的此语句进行处理和可用:

    resources :users
    

    所以 'users/:id/edit' 仍然可以工作。

    【讨论】:

    • 我有资源 :users 但不应该 users#setting 是 users#edit 吗?
    • 您可以这样做,但编辑操作会很大,因为它必须处理请求的各种条件。 REST 编辑操作需要一个 params[:id] 参数。如果您将路由更改为 '/settings/:id', :to => 'users#edit' 它将按您的预期工作,但是您的 'settings/privacy' 将更改为 settings/:id/privacy。此外,我将在我的答案中添加一条处理各种设置类别的路线。但我建议单独设置操作。
    • 哦,我重读了一遍,我想我明白你的意思了。我现在就试一试。
    • @Gregory:您还没有在任何地方定义/settings 路由,您刚刚创建了一个称为 设置的users/:id/edit 路由,以便settings_path 引用users/:id/edit:as 值(我没有看到)与路由的 URL 无关。
    • 完美!你的指示解决了我的问题。我还注意到我的用户在每次更新后都会被注销,所以我只是添加了一个登录方法,我存储在更新方法的会话助手中。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多