没有路线匹配{:action =>" show",:controller =>" admin / user"}

时间:2014-05-22 15:58:31

标签: ruby-on-rails ruby

SingularI有这个问题。我在路线文件中定义了我的路线:

namespace :admin do
    root to: "home#index"
    resources :define_user
end

我创建了用户控制器:

class DefineUsersController < ApplicationController

  def create
   ...
  end

  def destroy
  ...
  end
  end

我在视图中创建了新文件夹&#39; define_users&#39;与文件&#39; show.html.haml&#39;。我用link_to称呼它:

=link_to 'User', admin_define_user_path

我得到了上述错误。我想留下单数的名字。感谢所有答案。

2 个答案:

答案 0 :(得分:1)

您正在尝试访问没有DefineUser对象的显示路径

= link_to 'User', admin_define_user_path(define_user)

其中define_user是DefineUser类的对象或此对象的id

答案 1 :(得分:1)

首先,如果你想要link_to一些define_user,你必须提供对象或id。这样的事情:admin_define_user_path(@define_user)。 要显示所有可能的路由,请在控制台中键入rake routes

资源也应该是复数形式。

此外,您必须在控制器中提供命名空间。

P.S。 我认为,使用名为DefineUser的模型是一个非常糟糕的主意。这不是铁路方式。只需使用User即可。 DefineUser是方法的好名字,但不是模型。

因此,处理代码的最佳方法是:

的routes.rb

namespace :admin do
  root to: "home#index"
  resources :users
end

users_controller.rb

class Admin::UsersController < ApplicationController
  def index
    ...
  end
end

视图

= link_to 'Users', admin_users_path # for index
= link_to 'User', admin_user_path(@user) # for one user

按命名空间分隔控制器是个好主意。例如,您可以拥有下一个结构:

application_controller.rb
admin #folder
 L base_controller.rb
 L users_controller.rb
 L ..._controller.rb

所以你的base_controller应该继承自application_controller

class Admin::BaseController < ApplicationController
  layout 'admin_layout' # Different layout for all admin pages

admin命名空间中的其他控制器将从base_controller继承

class Admin::UsersController < Admin::BaseController
  def create
    ...
  end