Различные макеты и маршруты на отдельных видах для ресурса - PullRequest
5 голосов
/ 20 февраля 2011

Я новичок в rails и у меня есть вопрос, касающийся макетов и маршрутизации в CMS. Я не нашел ответа на этот конкретный вопрос после поиска в Интернете, поэтому я надеюсь, что кто-то здесь сможет мне помочь.

Я создаю CMS и мне нужны макеты, application.html.erb (по умолчанию), которая является передней общедоступной страницей, и admin.html.erb , которая доступна после вход в систему.

У меня есть ресурс с именем Post . Возможно ли, что только представление представления использует макет по умолчанию, в то время как остальные представления используют макет администратора?

Другими словами, я хочу, чтобы URL-адреса отдельных сообщений были похожи на «myAppDomain / posts / 1» и использовали макет по умолчанию
в то время как административные представления должны иметь префикс / admin и использовать макет администратора,
как "myAppDomain / admin / posts", "myAppDomain / admin / posts / 1 / edit"

Теперь я настроил маршрут, который «добавляет» / admin к URL-адресам сообщений

scope "/admin" do
   resources :posts
end

А в PostsController я указываю использовать макет админа

class PostsController < ApplicationController
   before_filter :authorize , :except => [:show]
   layout 'admin'
   ...

Так что теперь люди могут читать сообщения без входа в систему, но ссылки на один просмотр сообщений на моей странице приветствия отображаются как «myAppDomain / admin / posts / 1» и использует макет администратора

<%= link_to post.title, post %>

Есть ли способ использовать разные макеты и маршруты для отдельных видов для ресурса или мне следует использовать другой подход?

Ответы [ 2 ]

5 голосов
/ 20 февраля 2011

Просто укажите макет в действии

def show
    render :layout => 'application'    
end
1 голос
/ 12 декабря 2016

Вы можете сделать before_action

private

def layout_set
  if current_user.admin?
    layout 'admin'
  else
    layout 'default'
  end
end

В верхней части контроллера:

before_action :layout_set

Теперь вы можете забыть о добавлении макета. Вы можете сделать еще один шаг вперед и поместить действие before в свой контроллер приложений, а также добавить эту функциональность во все свои контроллеры, просто добавив одну и ту же before_action. Таким образом вы экономите много лишнего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...