【问题标题】:Restricting Rails routes to actions将 Rails 路由限制为操作
【发布时间】:2013-07-02 04:14:01
【问题描述】:

假设我有一个包含 #new 操作的 UsersController。在我的路线文件中,我使用以下内容进行映射:

match 'signup', to: 'users#new'

现在 /signup 和 /users/new 都可以访问此操作。如何将其限制为仅自定义路由。

如果这个问题已经得到解答,我很抱歉,但我对此很陌生。我已经搜索过,但没有找到答案。可能是因为我不知道如何简洁地表达这一点。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 routes


    【解决方案1】:

    您可以从 users 资源中免除 new 路由,并将其替换为您的自定义路由:

    resources :users, except: [:new]
    get 'signup', to: 'users#new', as: "new_user"
    

    导致:

        users GET        /users(.:format)               users#index
              POST       /users(.:format)               users#create
    edit_user GET        /users/:id/edit(.:format)      users#edit
         user GET        /users/:id(.:format)           users#show
              PUT        /users/:id(.:format)           users#update
              DELETE     /users/:id(.:format)           users#destroy
     new_user GET        /signup(.:format)              users#new
    

    【讨论】:

    • 像往常一样,简单而美丽。谢谢您的帮助。现在我听到约定说要坚持使用资源丰富的路线,但这是否仅意味着在控制器级别?与创建自定义路由相比,使用资源路由是否更合适?
    • 是的,按照惯例,您应该坚持使用资源丰富的路线。鉴于您正在创建一条名为 new_user 的新路线,所有标准的足智多谋的魔法应该都适用,但总的来说,遵守约定可以减少意外的机会。
    猜你喜欢
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 2012-06-19
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多