首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails路线,自定义问题:动作不被识别,总是“显示”

Rails路线,自定义问题:动作不被识别,总是“显示”
EN

Stack Overflow用户
提问于 2010-06-28 04:50:13
回答 4查看 7.7K关注 0票数 0

我试图‘管理’用户,而不是‘新’和‘显示’用户通过行动。问题就在我怀疑的路径中,因为我的链接'/users/manage‘被作为id参数接收,以“显示”操作:

进程的终端日志:

代码语言:javascript
复制
Processing UsersController#show (for 127.0.0.1 at 2010-06-28 00:31:45) [GET]
  Parameters: {"id"=>"manage"}

ActionController::UnknownAction (No action responded to show. Actions: create, destroy, index, manage, and update):

下面是一些相关部分的代码片段

users/index.html.erb (为进入管理部分而创建的链接,即'/users/ manage '):

代码语言:javascript
复制
<%= link_to('New User', :action => 'manage') %>

users_controller.rb (应该接收“管理”操作,但得到“显示”)在上面呼叫:

代码语言:javascript
复制
def index
    @users = User.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @users }
    end
  end

  def manage
      @users = User.all
      @user = User.find(params[:id]) if params[:id]
    @user = User.new if @user.nil?

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @user }
    end
  end

Ruby/rails将'/users/manage'视为':controller/:action/:id',即'users/show/1'.

当使用'/users/manage/1'编辑单个用户时,通过UsersController 'manage‘函数加载适当的:action (作为'manage'),并显示从manage.html.erb文件中编辑的所有内容。在他的情况下,UsersController正确地看到“管理”而不是“显示”,但这只是因为:id被传递,从而使‘:控制器/:action/:id’路由启动并工作。

'users/manage',:控制器/ :action 似乎是问题不承认“管理”是有效的:动作本身,而是在“显示”中作为:id发送。

routes.rb

代码语言:javascript
复制
ActionController::Routing::Routes.draw do |map|
  map.resources :users
  map.resources :categories
  map.resources :posts
  map.connect ':controller/:action'
  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end

有人能帮我解决这个问题吗?

为什么“秀”动作是自动进行的?我可以强制‘用户’和‘管理’在路线上被识别为‘管理’,而不是‘显示’?

谢谢大家的帮助:)

和平。

编辑rake路由

代码语言:javascript
复制
$ rake routes
(in /home/krnel/sites/rails_projects/simple_blog)
        users GET    /users(.:format)                   {:action=>"index", :controller=>"users"}
              POST   /users(.:format)                   {:action=>"create", :controller=>"users"}
     new_user GET    /users/new(.:format)               {:action=>"new", :controller=>"users"}
    edit_user GET    /users/:id/edit(.:format)          {:action=>"edit", :controller=>"users"}
         user GET    /users/:id(.:format)               {:action=>"show", :controller=>"users"}
              PUT    /users/:id(.:format)               {:action=>"update", :controller=>"users"}
              DELETE /users/:id(.:format)               {:action=>"destroy", :controller=>"users"}
   categories GET    /categories(.:format)              {:action=>"index", :controller=>"categories"}
              POST   /categories(.:format)              {:action=>"create", :controller=>"categories"}
 new_category GET    /categories/new(.:format)          {:action=>"new", :controller=>"categories"}
edit_category GET    /categories/:id/edit(.:format)     {:action=>"edit", :controller=>"categories"}
     category GET    /categories/:id(.:format)          {:action=>"show", :controller=>"categories"}
              PUT    /categories/:id(.:format)          {:action=>"update", :controller=>"categories"}
              DELETE /categories/:id(.:format)          {:action=>"destroy", :controller=>"categories"}
        posts GET    /posts(.:format)                   {:action=>"index", :controller=>"posts"}
              POST   /posts(.:format)                   {:action=>"create", :controller=>"posts"}
     new_post GET    /posts/new(.:format)               {:action=>"new", :controller=>"posts"}
    edit_post GET    /posts/:id/edit(.:format)          {:action=>"edit", :controller=>"posts"}
         post GET    /posts/:id(.:format)               {:action=>"show", :controller=>"posts"}
              PUT    /posts/:id(.:format)               {:action=>"update", :controller=>"posts"}
              DELETE /posts/:id(.:format)               {:action=>"destroy", :controller=>"posts"}
 manage_users GET    /users/manage(.:format)            {:action=>"manage", :controller=>"users"}
              GET    /users(.:format)                   {:action=>"index", :controller=>"users"}
              POST   /users(.:format)                   {:action=>"create", :controller=>"users"}
              GET    /users/new(.:format)               {:action=>"new", :controller=>"users"}
              GET    /users/:id/edit(.:format)          {:action=>"edit", :controller=>"users"}
              GET    /users/:id(.:format)               {:action=>"show", :controller=>"users"}
              PUT    /users/:id(.:format)               {:action=>"update", :controller=>"users"}
              DELETE /users/:id(.:format)               {:action=>"destroy", :controller=>"users"}
                     /:controller/:action/:id           
                     /:controller/:action/:id(.:format) 
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-28 05:07:56

实际上,您从来没有具体地映射“管理”操作。但是,您正在通过执行/users : map.resources :users映射map.resources、/users/:id、/users/:id/编辑和更多的路由(post、put、delete)。检查你的rake routes,找出你到底映射了什么。

根据您的问题,在您的情况下,您可以向用户资源添加如下路由:

代码语言:javascript
复制
map.resources :users, :collection => {:manage => :get}

这将为您的操作添加/用户/管理GET路由。您可以这样添加:成员或:集合。不同之处在于,该成员将期望提供一个:id,而集合则不会。

阅读更多rails路由指南:http://guides.rubyonrails.org/routing.html

正确的道路

您可能要做的是创建一个用于管理用户的Admin 命名空间。然后您的用户可以通过/admin/user、/admin/user/:id、/admin/user/:id/编辑等方式访问。这样,您就可以将管理用户的界面与用户正在编辑自己的配置文件的界面分隔开来。这是一个更好的实践,因为这样您不需要想出像/user/manage这样的自定义路由。它将为用户自己提供一个与CRUD区域无关的CRUD区域进行管理。

票数 6
EN

Stack Overflow用户

发布于 2015-08-06 06:34:26

您可以为控制器的其他GET类型操作添加如下所示的路由-

代码语言:javascript
复制
resources :users do
    collection do
      get 'manage'
    end
end
票数 3
EN

Stack Overflow用户

发布于 2010-06-28 12:51:28

如果要重命名路由,请在路由中使用:path_names散列,如下所示。

代码语言:javascript
复制
map.resources :photos, :path_names => { :new  => 'make', :edit  => 'change' } 

这将导致路由识别URL,如 /照片/制作/照片/1/更改 实际操作名称不会被此选项更改;所显示的两个URL仍将路由到新的和编辑的操作。

有关更多信息,请参见本指南:http://guides.rubyonrails.org/routing.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3130126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档