请帮助解决问题。
资源文档和相应的控制器:
class DocumentsController < ApplicationController
def index
@documents = Document.all.paginate(page: params[:page], per_page: 10)
end
def admin_index
@documents = Document.all.paginate(page: params[:page], per_page: 10)
render layout: "admin"
end
def show
@document = Document.find(params[:id])
end
def admin_show
@document = Document.find(params[:id])
render layout: "admin"
end
....
....
end
2个布局:
application.html.erb,
admin.html.erb
控制器索引列出公共部分(application.html.erb)中的文档。 admin_index控制器显示站点的封闭部分中的文档列表(admin.html.erb)。
在网站的公共部分,我可以点击“显示”来查看任何文档:
<% @documents.each do |document| %>
<%= document.title %>
<%= link_to 'Show', document %>
<% end %>
问题是,在网站的封闭部分,我没有通过点击以下链接查看任何文档:
<%= link_to 'Show', document %>
一个问题,它会抛出一个特定文档的页面,但布局:application.html.erb,我需要一个布局:admin.html.erb
路线:
Testpager::Application.routes.draw do
get "admin/index"
resources :news, only: [:index, :show]
resources :documents, only: [:index, :show, :destroy]
get "contacts/index"
get "services/index"
get "index/index"
get "admin/index"
get "admin/documents" => 'documents#admin_index'
get "admin/documents/:id" => 'documents#admin_show'
root 'index#index'
end
答案 0 :(得分:1)
首先,您在link_to
和index.html.erb
中使用admin_index.html.erb
帮助创建的链接没有区别,所以让我们来看看,&#39;首先是地址。
将admin_show
中的routes.rb
路线更改为:
get 'admin/documents/:id', to: 'documents#admin_show', as: 'admin_document'
现在将link_to
中的admin_index.html.erb
更改为:
<%= link_to 'Show', admin_document_path(document) %>
应该这样做。
您设置公众&#39;的方式和&#39; admin&#39;您网站的某些部分看似奇怪。我个人会在该命名空间中创建一个admin
命名空间和一个单独的DocumentsController
。如果需要,您必须更改routes.rb
,创建管理控制器,查看和布局。
将文档资源添加到admin命名空间,而不是您已添加的管理路由:
...
namespace :admin do
resources :documents, only: [:index, :show, :destroy]
end
resources :documents, only: [:index, :show, :destroy]
...
创建app/controllers/admin/documents_controller.rb
文件并将admin_*
方法从原始控制器移至该文件,并将admin_*.html.erb
视图移至app/views/admin/*.html.erb
。
现在,最后但并非最不重要的是将您的app/views/layouts/admin.html.erb
文件移至app/views/layouts/admin/application.html.erb
。应该这样做。
请注意,您必须在管理员控制器中使用模块:
module Admin
class DocumentsController < ApplicationController
...
end
end