О переопределении контроллеров Devise или Clearance - PullRequest
1 голос
/ 20 декабря 2011

Поскольку гемы аутентификации, такие как Devise или Clearance, используют свои собственные встроенные контроллеры, у меня есть несколько вопросов при их переопределении.Каждый раз, когда я пытался переопределить это, что-то идет не так, и я не знаю, что именно вызвало ошибку.

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

# app/controllers/registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController

Все хорошо.Теперь предположим, что я хочу добавить определенные элементы в def new части контроллера.

1.) Чтобы оставить часть def create контроллера в покое, я должен вставить

def create
    super
end

Это правильно?Или мне вообще нужно ссылаться на него в новом контроллере?

2.) Если я наберу

def new
    #my custom code here
end

Заменит ли это часть def new исходного контроллера Devise,или это просто добавляет к этому?То есть я должен также вставить

resource = build_resource({})
respond_with_navigational(resource){ render_with_scope :new }

, который является поведением по умолчанию для новой части def Devise registrations_controller.rb ?

3.) В Devise есть фильтр, который запрещает вам регистрироваться, если вы вошли в систему, но мне нужно это переопределить.Как мне это сделать?Я предполагаю, что это как-то связано с prepend_before_filter :require_no_authentication, :only => [ :new, :create, :cancel ] частью registrations_controller.rb , но я не слишком уверен.

Те же вопросы относятся к оформлению, хотя и с небольшимразные маршруты и файлы ... (Я тоже прошу Clearance, потому что я еще не решил, какой гем аутентификации использовать - Clearance мне нравится из-за легкого кода, но у Devise есть дополнительные функции, которые мне тоже понадобятся).

1 Ответ

1 голос
/ 20 декабря 2011

1) Это правильно.

2) Если вы хотите вызвать логику родителя, вы можете вызвать super в соответствующей точке вашей логики подкласса.

3)Если вы переопределите контроллер регистрации, вы можете позвонить skip_before_filter :require_no_authentication.Это должно полностью пропустить его, поэтому, если вам нужен фильтр before в определенных условиях, вам придется добавить еще before_filter.

...