Рендеринг формы для редактирования пароля разработки

#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» вместо того места, где я отрисовал форму. И при принятии изменения пароля он перенаправляется на страницу индекса приложения. Как бы я управлял этими перенаправлениями?