【问题标题】:Change routing of new and edit更改新的和编辑的路由
【发布时间】:2012-09-09 01:02:59
【问题描述】:

我为“帖子”设置了脚手架,并希望使用 ActiveAdmin 来编辑和创建新的。

在我的 routes.rb 文件中,我有这样的帖子设置:

resources :posts

我希望当有人转到“/posts/new”时被重定向到“/admin/posts/new” 编辑也是一样。从 '/posts/:id/edit' 到 '/admin/posts/:id/edit'

如何在更改新路线和编辑路线时保持其他路线不变?

编辑

这是我的“rake 路线”

 tags GET        /tags(.:format)                           tags#index
                           POST       /tags(.:format)                           tags#create
                   new_tag GET        /tags/new(.:format)                       tags#new
                  edit_tag GET        /tags/:id/edit(.:format)                  tags#edit
                       tag GET        /tags/:id(.:format)                       tags#show
                           PUT        /tags/:id(.:format)                       tags#update
                           DELETE     /tags/:id(.:format)                       tags#destroy
                admin_root            /admin(.:format)                          admin/dashboard#index
batch_action_admin_admin_users POST       /admin/admin_users/batch_action(.:format) admin/admin_users#batch_action
         admin_admin_users GET        /admin/admin_users(.:format)              admin/admin_users#index
                           POST       /admin/admin_users(.:format)              admin/admin_users#create
      new_admin_admin_user GET        /admin/admin_users/new(.:format)          admin/admin_users#new
     edit_admin_admin_user GET        /admin/admin_users/:id/edit(.:format)     admin/admin_users#edit
          admin_admin_user GET        /admin/admin_users/:id(.:format)          admin/admin_users#show
                           PUT        /admin/admin_users/:id(.:format)          admin/admin_users#update
                           DELETE     /admin/admin_users/:id(.:format)          admin/admin_users#destroy
           admin_dashboard            /admin/dashboard(.:format)                admin/dashboard#index
  batch_action_admin_posts POST       /admin/posts/batch_action(.:format)       admin/posts#batch_action
               admin_posts GET        /admin/posts(.:format)                    admin/posts#index
                           POST       /admin/posts(.:format)                    admin/posts#create
            new_admin_post GET        /admin/posts/new(.:format)                admin/posts#new
           edit_admin_post GET        /admin/posts/:id/edit(.:format)           admin/posts#edit
                admin_post GET        /admin/posts/:id(.:format)                admin/posts#show
                           PUT        /admin/posts/:id(.:format)                admin/posts#update
                           DELETE     /admin/posts/:id(.:format)                admin/posts#destroy
   batch_action_admin_tags POST       /admin/tags/batch_action(.:format)        admin/tags#batch_action
                admin_tags GET        /admin/tags(.:format)                     admin/tags#index
                           POST       /admin/tags(.:format)                     admin/tags#create
             new_admin_tag GET        /admin/tags/new(.:format)                 admin/tags#new
            edit_admin_tag GET        /admin/tags/:id/edit(.:format)            admin/tags#edit
                 admin_tag GET        /admin/tags/:id(.:format)                 admin/tags#show
                           PUT        /admin/tags/:id(.:format)                 admin/tags#update
                           DELETE     /admin/tags/:id(.:format)                 admin/tags#destroy
batch_action_admin_comments POST       /admin/comments/batch_action(.:format)    admin/comments#batch_action
            admin_comments GET        /admin/comments(.:format)                 admin/comments#index
                           POST       /admin/comments(.:format)                 admin/comments#create
             admin_comment GET        /admin/comments/:id(.:format)             admin/comments#show
    new_admin_user_session GET        /admin/login(.:format)                    active_admin/devise/sessions#new
        admin_user_session POST       /admin/login(.:format)                    active_admin/devise/sessions#create
destroy_admin_user_session DELETE|GET /admin/logout(.:format)                   active_admin/devise/sessions#destroy
       admin_user_password POST       /admin/password(.:format)                 active_admin/devise/passwords#create
   new_admin_user_password GET        /admin/password/new(.:format)             active_admin/devise/passwords#new
  edit_admin_user_password GET        /admin/password/edit(.:format)            active_admin/devise/passwords#edit
                           PUT        /admin/password(.:format)                 active_admin/devise/passwords#update
                     posts GET        /posts(.:format)                          posts#index
                           POST       /posts(.:format)                          posts#create
                  new_post GET        /posts/new(.:format)                      posts#new
                 edit_post GET        /posts/:id/edit(.:format)                 posts#edit
                      post GET        /posts/:id(.:format)                      posts#show
                           PUT        /posts/:id(.:format)                      posts#update
                           DELETE     /posts/:id(.:format)                      posts#destroy
                      root            /                                         posts#index

【问题讨论】:

    标签: ruby-on-rails ruby routes


    【解决方案1】:

    试试这样的

    # config/routes.rb
    resources :posts, except: [:new, edit] do
      get 'new' => redirect("/admin/posts/new"), :on => :collection
      get 'edit' => redirect("/admin/posts/:id/edit"), :on => :member
    end
    

    PS 请将您的$ rake routes 添加到您的问题中,以使我的代码示例更清晰。

    【讨论】:

    • 当我将重定向 :id 更改为 %{id} 时,编辑部分运行良好......但我无法让“新”部分正常工作。我不断收到:“ActiveRecord::RecordNotFound in PostsController#show 找不到 id=new 的帖子”....所以我只选择了 Ugis 的答案。谢谢。
    【解决方案2】:
    get "/posts/new" => redirect("/admin/posts/new")
    get "/posts/:id/edit" => redirect("/admin/posts/:id/edit")
    resources :posts
    

    【讨论】:

    • 谢谢!新的部分工作得很好。您只需将编辑部分更改为:get "/posts/:id/edit" => redirect("/admin/posts/%{id}/edit")。重定向的“:id”部分必须像这样“%{id}”
    【解决方案3】:

    也许你可以 redirect_to 在编辑和新方法中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-26
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 1970-01-01
      相关资源
      最近更新 更多