Devise: как я могу получить доступ к вспомогательным методам во всех моих контроллерах

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

Нужно ли мне как-то наследовать вспомогательные методы devise для достижения этой цели?


person Aaron Dufall    schedule 14.06.2012    source источник


Ответы (1)


Когда дело доходит до создания пользовательской страницы входа, это не имеет ничего общего с вашим контроллером, это связано с доступом к вещам в вашем представлении с помощью вспомогательных методов. Вы хотите добавить их в свой файл application_helper.rb. Обзор метода здесь:

https://github.com/plataformatec/devise/wiki/How-To:-Display-a-custom-sign_in-form-anywhere-in-your-app

Короче говоря, вы в основном хотите добавить это в свой application_helper.rb

def resource_name
 :user
end

def resource
  @resource ||= User.new
end

def devise_mapping
  @devise_mapping ||= Devise.mappings[:user]
end

Я использовал это несколько раз во всех своих проектах, чтобы создавать настраиваемые формы входа в панель навигации, когда я использую twitter bootstrap. Он отлично работает и не требует изменения какого-либо другого кода где-либо еще.

person de_an777    schedule 14.06.2012
comment
Спасибо, это помогло. В соответствии с соглашениями лучше всего хранить его в помощнике приложения или отдельном помощнике аутентификации? - person Aaron Dufall; 16.06.2012
comment
Вам нужно поместить его в application_helper.rb, так как он будет на панели навигации макета и потенциально может отображаться в любом из представлений ваших контроллеров. Только вспомогательные методы, которые имеют значение для конкретного контроллера, должны находиться в вспомогательном файле этого контроллера. Вот почему вы получили ошибку в первую очередь, во вспомогательном файле devise они есть, и когда вы вызываете эти методы вне своего контроллера, он не знает, о каких методах вы говорите. Короче говоря, если вам нужно, чтобы он был доступен везде, поместите его в application_helper.rb, в противном случае просто поместите его в вспомогательный файл этого контроллера. - person de_an777; 16.06.2012
comment
Я знаю, что этот вопрос не был активен в течение 2 лет. Но я столкнулся с той же проблемой доступа к помощникам ресурсов devise. Дело в том, что у меня есть более одного ресурса, в частности, один для клиента и один для администратора. Как я могу добиться этого, учитывая мой случай? - person Luis Crespo; 06.10.2014