如何通过管理面板查看页面?

时间:2015-05-02 06:19:29

标签: ruby-on-rails ruby-on-rails-4

请帮助解决问题。

资源文档和相应的控制器:

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    

1 个答案:

答案 0 :(得分:1)

首先,您在link_toindex.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