Настройка представлений Devise в Rails - PullRequest
68 голосов
/ 11 июля 2011

Я использую devise для аутентификации пользователя, но у меня есть хорошие макеты для страниц регистрации, входа и т. Д.Я уже выполнил команду rails generate devise:views User и у меня есть все представления в папке представлений, однако, когда я заменил registration / new.html.erb своим собственным new.html.erb, ничего не меняется и не выглядит иначе.Это как если бы я что-то сделал.

Кто-нибудь знает, что я делаю неправильно или, по крайней мере, как успешно настроить представления устройства

PS Важно отметить, что я изменил маршрут разработки/ регистрация # новое для / регистрация?

Ответы [ 8 ]

117 голосов
/ 17 февраля 2013

краткий ответ.

... вместо

rails generate devise:views User

использование:

rails generate devise:views

Если вы уже сделали это, переместите созданную папку из app/views/User в новую папку app/views/devise (или просто переименуйте папку User в devise, если это возможно.)

Эти папки:

app/views/User/confirmations
app/views/User/mailer
app/views/User/passwords
app/views/User/registrations
app/views/User/sessions
app/views/User/shared
app/views/User/unlocks

Никаких других изменений не требуется.

102 голосов
/ 24 марта 2013

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

в файле config/initializers/devise.rb есть следующий блок кода:

# ==> Scopes configuration
# Turn scoped views on. Before rendering "sessions/new", it will first check for
# "users/sessions/new". It's turned off by default because it's slower if you
# are using only default views.
# config.scoped_views = false

, раскомментировав config.scoped_views = false и изменив его значение на true, devise автоматически проверит, существует ли пользовательское представление и, если это так, обработает его. Как говорится, это добавляет некоторые накладные расходы на приложение, но, по моему опыту, пока это минимально.

30 голосов
/ 11 июля 2011

Ваш маршрут signup или devise/registrations#new отобразит вид views/devise/registrations/new.html.erb. Похоже, вы сделали изменяется на views/user/registrations/new.html.erb, что объясняет почему вы не видите сделанные изменения, поскольку они не отображаются.

Вам нужно будет либо создать user/registrations_controller.rb, который простирается от Devise::RegistrationsController и укажите ваш /signup маршрут к user/registrations#new, или вы можете просто внести изменения непосредственно к views/devise/registrations/new.html.erb

Та же идея применима к вашим страницам входа в систему (devise/sessions).

Надеюсь, это поможет.

24 голосов
/ 13 июня 2012

Для тех, у кого все еще есть проблемы, проблема заключается в вызове rails generate devise:views User. Это должно быть rails generate devise:views для получения текущих представлений из Devise Rails Engine. Это создаст правильные представления, которые будут работать с маршрутами по умолчанию.

19 голосов
/ 10 июня 2015

После создания пользовательских представлений, например

rails generate devise:views User

Включите scoped_views в config/initializer/devise.rb

view config.scoped_views = true

И все готово.

10 голосов
/ 08 февраля 2013

Использование rails g devise:views User позволяет настраивать, когда у вас более одной роли.

правильный способ сделать это - перейти в папку devise.rb в config/initializer/

и раскомментирование и настройка config.scoped_views = true.

теперь вы можете редактировать файлы erb для просмотра без проблем

9 голосов
/ 13 сентября 2014

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

После rails generate devise:views убедитесь, что вы заходите в initializers/devise.rb и устанавливаете config.scoped_views = true. Это объясняется в документации по устройству https://github.com/plataformatec/devise, а также в комментариях devise.rb.

После того, как я сделал это, мои собственные представления в views/users начали появляться вместо тех, что в драгоценном камне.

2 голосов
/ 26 мая 2013

Для дальнейшего использования вы можете просто переименовать папку из devise => user и наоборот, и rails найдет маршрут.

...