Rails路由默认情况下重定向到不同的视图

时间:2014-10-07 05:11:24

标签: ruby-on-rails

以下是我的routes.rb

Rails.application.routes.draw do
  resources :admin do
    post 'user_creation', on: :collection
  end
  get 'admin/user_creation'
  resources :admin, :only => [:user_creation, :create, :new]
 end

以下是我的控制器

class AdminController < ApplicationController
  def new
    @dashboard_user = DashboardUser.new
  end
  def create
    @dashboard_user = DashboardUser.new(dashboard_params)
    @dashboard_user.save!
  end
  def user_creation

  end
  private
  def dashboard_params
  params.require(:dashboard_user).permit(:user_name, :password, :last_name, :first_name, :middle_name , :phone)
  end
end

然后是一个简单的.html.erb文件 会发生什么事情,当我尝试打开链接admin / user_creation时,它会自动重定向到show.html.erb文件

rake路线输出

rake routes
                   Prefix Verb   URI Pattern                    Controller#Action
user_creation_admin_index POST   /admin/user_creation(.:format) admin#user_creation
              admin_index GET    /admin(.:format)               admin#index
                          POST   /admin(.:format)               admin#create
                new_admin GET    /admin/new(.:format)           admin#new
               edit_admin GET    /admin/:id/edit(.:format)      admin#edit
                    admin GET    /admin/:id(.:format)           admin#show
                          PATCH  /admin/:id(.:format)           admin#update
                          PUT    /admin/:id(.:format)           admin#update
                          DELETE /admin/:id(.:format)           admin#destroy
      admin_user_creation GET    /admin/user_creation(.:format) admin#user_creation
                          POST   /admin(.:format)               admin#create
                          GET    /admin/new(.:format)           admin#new
                     root GET    /                              admin#new

2 个答案:

答案 0 :(得分:1)

您正在点击网址的链接。 admin/user_creation 但是你的路线说它是一个POST网址。

需要添加为GET。

Rails.application.routes.draw do
  resources :admin do
    post 'user_creation', on: :collection
    get 'user_creation', on: :collection
  end
  get 'admin/user_creation'
  resources :admin, :only => [:user_creation, :create, :new]
 end 

答案 1 :(得分:0)

你的路线不太好看。每当我们尝试直接从浏览器转到任何网址时,它会将请求视为get类型。 routes文件尝试从上到下查找路由。这就是为什么它将/admin/user_creation视为显示admin_controlleruser_creation的动作的原因。

不知道为什么需要获取和发布相同操作的请求。但是你的路线应该是这样的:

Rails.application.routes.draw do
  resources :admin, :only => [:create, :new] do
    post 'user_creation', on: :collection
    get 'user_creation', on: :collection
  end
end

上述路线的一件事是没有展示行动的路线。现在您将正确转到user_creation路径。

如果您不需要任何帖子路径,那么它应该如下所示:

Rails.application.routes.draw do
  resources :admin, :only => [:create, :new] do
    get 'user_creation', on: :collection
  end
end

如果您需要所有默认操作:

Rails.application.routes.draw do
  resources :admin do
    get 'user_creation', on: :collection
  end
end