【问题标题】:Alias route for same controller action in Rails 4Rails 4中相同控制器操作的别名路由
【发布时间】:2017-05-11 02:52:54
【问题描述】:

我是 Rails 路线的新手...

我正在尝试为我创建一个别名路由

resources :users

^/users/123

我的目标是在 URL 的末尾添加一个/granted,比如/users/123/granted

我正在尝试添加一个 get 来为同一控制器操作创建另一个路由...我需要这个用于 SEO

get '/users/:id/granted', to: 'users#show', as: :granted

^ 我希望这会生成/users/:id/granted,但我不断得到...

/users/:user_id/users/:id/granted

看起来它附加了不同的格式,:user_id 作为参数...但我需要参数保持为:id

我试过了

get '/granted', to: 'users#show', as: :granted

它会生成/users/:user_id/granted,这是不行的,因为正如我上面提到的......我希望参数键保持为:id

【问题讨论】:

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


    【解决方案1】:

    我可以看到您需要为 2 个任务解决问题:定义新路由 (/users/:id/granted) 并将该路由作为现有控制器操作的别名 (users#show)。

    在此之前,让我帮助您熟悉 Rails 最佳实践之一当您需要向 RESTful 资源添加更多自定义操作(resources :users 创建的 7 个默认操作除外)时 -- 使用membercollection 路由。

    所以,要在users 资源中添加/granted 成员路由,可以这样写:

    resources :users do
      get 'granted', on: :member
    end
    

    此外,要将新添加的路由指向现有控制器操作(在您的情况下为users#show),只需将其传递给:to 选项:

    resources :users do
      get 'granted', to: 'users#show', on: :member
    end
    

    如果您在 users 资源下还有其他现有成员路由,则改为在 member 块内添加路由:

    resources :users do
      member do
        # other custom member routes
        get 'granted', to: 'users#show'
      end
    end
    

    rake routes 为您的特定 granted 路由输出:

    granted_user GET    /users/:id/granted(.:format) users#show
    

    【讨论】:

      【解决方案2】:

      要让事情完全按照您的意愿工作,请改为执行此操作 -

      resources :users
      get '/users/:id/granted', to: 'users#show', as: :granted
      

      【讨论】:

      • 对不起...我还需要资源的正常路线。我需要它们 2 才能访问。谢谢@bitsapien
      • 在这种情况下,您的代码应该可以工作。我已经编辑了我的答案,尝试一下并粘贴 rake routes 的结果。
      • 得到类似user_granted GET /users/:user_id/users/:id/granted(.:format) users#show@bitsapient的东西
      • 我很确定您将路由定义包含在这样的资源块中 - resources :users do get '/users/:id/granted', to: 'users#show', as: :granted end 将其更改为我上面建议的内容。
      • 是的,资源块中有collectionmember。我最终在member 块内指定了这个get :granted, to: 'users#show'。感谢您抽出宝贵时间...@bitsapien
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 2011-09-25
      • 2012-08-01
      相关资源
      最近更新 更多