【问题标题】:Rendering the Devise edit Password Form呈现设计编辑密码表单
【发布时间】:2011-05-06 18:54:47
【问题描述】:

我正在尝试在另一个视图中呈现设计编辑密码表单,因为我不想复制编辑密码逻辑。

我尝试了以下方法(在生成设计视图之后):

<%= render 'devise/passwords/edit' %>
<%= render 'devise/passwords/form' %>

还有许多其他的渲染变体似乎都给了我同样的错误:

"ActionView::MissingTemplate in foo#foo 缺少部分设计/密码/编辑..."

这种变化:

  <%= render :file => 'devise/passwords/edit.html.erb' %>

给了我一些希望,但出现以下错误:

"# 的未定义局部变量或方法 `resource'"

围绕这条线:

<%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f| %>

这让我觉得我很接近(因为那是我想要的表单中的代码)但该模板不应该使用隐藏的 Devise 控制器中的正确逻辑吗?还是我需要在路由文件中做一些事情才能让它工作?

我走远了吗?

【问题讨论】:

    标签: ruby-on-rails-3 devise


    【解决方案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"

    【讨论】:

    • 感谢您的回答。使用“用户”而不是“用户”让我看到一条新的错误消息:未定义的方法 `devise_error_messages!'对于#:0x4b44fd0>
    • 包含devise_helper.rb 文件以修复该(新)问题;或删除该调用并使用您自己的错误报告。既然我的回答解决了你的问题,你可以接受!
    • 谢谢你的工作。最后一个问题。当表单提交错误时,它会重定向到“/users”而不是我呈现表单的地方。在接受密码更改后,它会重定向到应用程序的索引页面。我将如何控制这些重定向?
    猜你喜欢
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 2018-03-23
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    相关资源
    最近更新 更多