Налаштування уявлень Devise у Rails


77

Я використовую devise для авторизації користувача, але у мене є приємні макети для сторінок реєстрації, входу тощо. Я вже виконав rails generate devise:views Userкоманду і маю всі представлення в папці views, однак, коли я замінив реєстрацію / new.html.erb своїм власним new.html.erb, нічого не змінюється і не виглядає інакше. Наче я щось зробив.

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

PS Важливо зазначити, що я змінив маршрут створення / реєстрації # нового на / реєстрація?


Ви намагалися очистити кеш? перезавантаження? перезапуск сервера?
Gal


1
Я зрозумів це ... Я не можу мати користувачів наприкінці
Вассерт

@Vasseurth: для уточнення, ви маєте на увазі, що не слід ставити "Користувач" в кінці команди rails generating, оскільки вона генерує область перегляду, яка не є тим, що ви хотіли.
Колін

Відповіді:


33

Ваш маршрут 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сторінок для входу ( ).

Сподіваюся, це допомагає.


Як я буду відрізнятись від користувачів та адміністратора, коли я це роблю, якщо немає / користувачі / реєстрація або / адміністратор / реєстрації?
Вассерт,

3
rails генерують пристрій: перегляди Користувач вже створив / користувачі / реєстрації для вас уже правильні? Якщо у вас також є роль адміністратора, вам також потрібно згенерувати подання адміністратора (рейки генерують пристрій: перегляди адміністратора).
Кевін Цой,

121

з першого погляду відповідь.

...замість

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

Ніяких інших змін не потрібно.


3
Це відповідь. Ви не можете редагувати подання пристроїв за замовчуванням, оскільки вони знаходяться в самоцвіті, поки ви не генеруєте його таким чином. Дякую.
Лукас

Я куплю тобі чашку кави, якщо коли-небудь перетну твій шлях IRL.
Томас Аюб,

3
Якщо ви хочете налаштувати подання з певного контролера, додайте такий -vпараметр:rails generate devise:views -v registrations confirmations
Chambeur

6
Це відповідь, якщо у вас є лише одна модель для автентифікації . Якщо у вас є 2 моделі для автентифікації, скажіть usersі admins, вам доведеться піти з відповіддю нижче @QBDSolutions
Aswin

109

хоча це давнє запитання, я думав додати до нього на випадок, якщо хтось наткнеться на нього. Я не впевнений, що це нове доповнення, оскільки спочатку було задано питання, але якщо так, то це простіший (сучасніший) підхід.

у файлі 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, пристрій автоматично перевіряє, чи існує спеціальне представлення, і якщо так, то подайте це. Як сказано, він додає додаткові накладні витрати на програму, але, на мій досвід, це поки що мінімально.


3
Дякую! Я намагався зрозуміти, як активувати свої "власні" подання, поки не натрапив на вашу відповідь.
Ксандер

4
Це слід позначити як рішення, оскільки воно правильно вирішує початкову проблему.
michaeldwp

4
Насправді, встановлення для цього параметра значення true не додає накладних витрат, якщо ви фактично визначаєте власні подання. Я думаю, ви, можливо, неправильно витлумачили значення коментаря у файлі. На що вказує насправді, за замовчуванням немає жодних підстав для ввімкнення власних подань. Отже, якщо ви ввімкнете їх і насправді не визначите нові подання, він, здається, перевірить, чи існують вони, тоді він повернеться до значення за замовчуванням, що призведе до накладних витрат. Отже, поки ви визначаєте власні подання, теоретично встановивши для цього параметра значення true, не слід додавати жодних накладних витрат.
mkralla11

1
Це правильна відповідь, концепція рубіну - це СУХИЙ.
vidur punj

1
Чудово. відповідь! У мене була модель під назвою "Події", і я довгий час був тупий, чому Rails не перенаправляє на мій контролер подій, а замість цього розробляє / події. здається варіантом, який ви описали, зробіть так, щоб Rails перевірив, чи маю я спочатку шлях до подій, перш ніж перейти до devise / events
ChairmanMeow

25

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


Як я можу повернутися назад? Я запустив, що rails generate devise:views Userвін створив папку Usersу поданні, а також папку контролера users. Коли я змінив назву на deviseце не працює?
Стівен Агілар,

20

Після генерації власних подань, наприклад

rails generate devise:views User

Увімкніть scoped_viewsвconfig/initializer/devise.rb

view config.scoped_views = true

І ви закінчили.


12

Використовуючи rails g devise:views User дозволяє налаштувати, коли у вас більше однієї ролі.

правильний спосіб зробити це відбувається у вашому devise.rbінconfig/initializer/ папку

і коментування та налаштування config.scoped_views = true.

тепер ви можете редагувати файли вигляду erb без будь-яких проблем


1
Це має бути відповідь
Айман Салах

12

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

Після rails generate devise:viewsпереконайтеся, що ви зайшли initializers/devise.rbі налаштували config.scoped_views = true. Це пояснюється в документації до пристрою на https://github.com/plataformatec/devise , а також у devise.rbкоментарях.

Після того, як я це зробив, мої власні погляди views/usersпочали з'являтися замість тих, що в самоцвіті.


2

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


1
Я вважаю, що це рівнозначно виконанню, rails g devise:views Userза винятком того, що він додає нову папку поряд із розробленою. що стосується дозволу рейкам знаходити маршрут, я не думаю, що це дуже гарна звичка
DazBaldwin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.