Ruby on rails Rails3:在将new/edit/destroy发送到/admin时,如何将控制器索引和显示操作路由到root用户?

Ruby on rails Rails3:在将new/edit/destroy发送到/admin时,如何将控制器索引和显示操作路由到root用户?,ruby-on-rails,routes,Ruby On Rails,Routes,首先,我使用的是rails 3.0.8和友好的id 3.2.1.1 我希望能够在website.com/:title上查看帖子,所以请删除“/帖子” 但我也希望有一个/admin视图。从那里,用户应该能够创建/编辑/销毁帖子。我已经有一个admin.html.erb视图,其中包含指向各种操作的链接 现在,我的路由文件如下所示: MyApp::Application.routes.draw do root :to => 'posts#index' resources :posts

首先,我使用的是rails 3.0.8和友好的id 3.2.1.1

我希望能够在website.com/:title上查看帖子,所以请删除“/帖子”

但我也希望有一个/admin视图。从那里,用户应该能够创建/编辑/销毁帖子。我已经有一个admin.html.erb视图,其中包含指向各种操作的链接

现在,我的路由文件如下所示:

MyApp::Application.routes.draw do
  root :to => 'posts#index'
  resources :posts
  match "/:id" => "posts#show"
  match "/admin" => "posts#admin"
end
这适用于website.com/:title,但对于website.com/admin,我得到一个错误:

Couldn't find Post with ID=admin

。。。。这是有道理的。但我不知道如何解决这个问题

规则自上而下贯穿始终。因此,将您的管理规则放在资源定义的顶部。

如果您先放置
/admin
,那么它将工作(如cellcortex所述)。如果您可以将您的
:id
'admin'
整齐地分开,您也可以使用
:constraints
;例如,如果您的
:id
值是数字,那么类似的方法应该可以工作:

match '/:id'   => 'posts#show', :constraints => { :id => /\d+/ }
match '/admin' => 'posts#admin'
在像您这样的简单情况下,将事情按正确的顺序进行将很好。但是,如果您的路由更复杂,那么
:constraints
方法可能会更好地工作,并避免一些混乱和混乱。

使用此方法

resource :posts, :path => '/'
有了这篇文章,你的所有文章都将直接放在根目录下

因此,在Posts类中,您可以添加以下内容:

def to_param
  "#{id}-#{title.parameterize}"
end