#ruby-on-rails-3 #devise
#ruby-on-rails-3 #разработка
Вопрос:
Я пытаюсь отобразить форму Devise edit password в другом представлении, потому что я не хочу дублировать логику edit pw.
Я попробовал следующее (после генерации представлений Devise):
<%= render 'devise/passwords/edit' %>
<%= render 'devise/passwords/form' %>
И ряд других вариантов рендеринга, которые, похоже, выдают мне одну и ту же ошибку:
«ActionView::MissingTemplate в foo#foo Отсутствует частичная разработка / пароли / редактирование …»
Этот вариант:
<%= render :file => 'devise/passwords/edit.html.erb' %>
Дал мне некоторую надежду, но следующая ошибка:
«неопределенная локальная переменная или метод `resource’ для #<#:0x47ef0e0>»
вокруг этой строки:
<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f| %>
Это заставляет меня думать, что я близок (поскольку это код из формы, которую я хочу), но разве этот шаблон не должен использовать правильную логику из скрытого контроллера Devise? Или мне нужно что-то сделать в файле routes, чтобы это заработало?
Я сбился с пути?
Ответ №1:
Попробуйте это:
<%= render :template => 'devise/passwords/edit',
:locals => {
:resource => my_user_model_variable,
:resource_name => my_user_model_name } %>
Где:
my_user_model_variable
может бытьcurrent_user
my_user_model_name
может быть"User"
Комментарии:
1. Спасибо за ваш ответ. Использование «user» вместо «Пользователь» привело меня к новому сообщению об ошибке: неопределенный метод `devise_error_messages!’ для #<#<Класс: 0x4b92208>:0x4b44fd0>
2. Включите
devise_helper.rb
файл для устранения этой (новой) проблемы; или удалите этот вызов и используйте свой собственный отчет об ошибках. И поскольку мой ответ устранил вашу проблему, вы можете принять его!3. Спасибо, что сработало. Последний вопрос. Когда форма отправляется с ошибками, она перенаправляется на «/users» вместо того места, где я отрисовал форму. И при принятии изменения пароля он перенаправляется на страницу индекса приложения. Как бы я управлял этими перенаправлениями?