Как сделать просмотр страницы через админку?

Рейтинг: 0Ответов: 2Опубликовано: 02.05.2015

Как сделать просмотр страницы через админку?

Есть ресурс documents и соответствующий контроллер:

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 layouts:

application.html.erb, 
admin.html.erb

контроллер index выводит список документов в публичной части сайта(application.html.erb). контроллер admin_index выводит список документов в закрытой части сайта(admin.html.erb).

в публичной части сайта я могу посмотреть любой документ, нажав на ссылку 'show':

<% @documents.each do |document| %>
    <%= document.title %>
    <%= link_to 'Show', document %>
<% end %>

проблема в том, что в закрытой части сайта у меня не получается посмотреть любой документ, нажав ссылку:

<%= link_to 'Show', document %>

меня перебрасывает на страницу конкретного документа, но layout: application.html.erb, а мне нужен layout: admin.html.erb

routes:

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    

Ответы

▲ 2

Хочу порекомендовать разделить текущий контроллер на два (app/controllers/documents_controller.rb и app/controllers/admin/documents_controller.rb). Этот подход даст несколько плюсов -- изолированное пространство имен для админской части, независимые пути, возможность задать layout для каждого контроллера:

# app/controllers/admin/documents_controller.rb
class Admin::DocumentsController < ApplicationController
  layout 'admin'

  def index
  end
end

# app/controllers/documents_controller.rb 
class DocumentsController < ApplicationController
  def index
  end
end


# routes
Testpager::Application.routes.draw do
  namespace :admin do
    resources :documents, only: [:index, :show, :destroy]
  end

  resources :documents, only: [:index, :show, :destroy]
end   


# links
link_to "Show in public part", document_path(@document)
link_to "Show in admin part", admin_document_path(@document)
▲ 1

Попробуйте так:

link_to "Show", controller: "documents", action: "admin_show", id: @document

А вообще почитайте документацию к хелперу.