Ruby on Rails - представляет расположение

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

throw;

при печати трассировки, следующей "из броска исключая" Вы будете видеть, что это заканчивается на том операторе а не в реальном источнике исключения.

В основном, это нужно считать уголовным преступлением для использования "броска исключая".

19
задан RyanJM 14 July 2009 в 21:14
поделиться

5 ответов

Метод render будет фактически пытаться визуализировать контент; вы не должны вызывать его, когда все, что вы хотите сделать, это установить макет.

В Rails есть шаблон для всего этого. Просто передайте символ в layout , и метод с этим именем будет вызван для определения текущего макета:

class MyController < ApplicationController
  layout :admin_layout

  private

  def admin_layout
    # Check if logged in, because current_user could be nil.
    if logged_in? and current_user.is_able_to('siteadmin')
      "admin"
    else
      "application"
    end
  end
end

Подробнее см. Здесь .

40
ответ дан 30 November 2019 в 02:52
поделиться

Возможно, вам нужно сначала проверить, что пользователь вошел в систему?

def admin_layout
  if current_user and current_user.is_able_to 'siteadmin'
    render :layout => 'admin'
  else
    render :layout => 'application'
  end
end
5
ответ дан 30 November 2019 в 02:52
поделиться

Это может быть потому, что current_user равно nil , когда пользователь не вошел в систему. Либо проверьте для .nil? , либо инициализировать объект.

1
ответ дан 30 November 2019 в 02:52
поделиться

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

, например

 if !@current_user.nil?
   if @current_user.is_able_to("###")
     render :layout => "admin"
   else
    render :layout => "application"
   end
 end

Тогда это будет вводить оператор if, только если ваш @current_user не равен нулю.

0
ответ дан 30 November 2019 в 02:52
поделиться

Попробуйте ответить molf с помощью:

if logged_in? и current_user.is_able_to ('siteadmin')

0
ответ дан 30 November 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: