我有一个像这样的重置密码表单
<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %>
<%= f.hidden_field :reset_password_token %>
<div class="form-group ">
<div class="input-group">
<div class="input-group-addon">
<span class="glyphicon glyphicon-envelope"></span>
</div>
<%= f.text_field :email, placeholder: resource.email, required: true, autofocus: true, class: "form-control", disabled: true %>
</div>
</div>
我希望上面字段的占位符是资源的电子邮件,但此时resource
仅包含字段reset_password_token
,如下所示
=> #<Company id: nil, name: nil, email: nil
如何以此格式显示资源的电子邮件?
答案 0 :(得分:1)
如果你看一下设计代码,这种行为是完全有意义的:
https://github.com/plataformatec/devise/blob/master/app/controllers/devise/passwords_controller.rb
编辑方法:
def edit
self.resource = resource_class.new
resource.reset_password_token = params[:reset_password_token]
end
它只是创建一个新资源(例如User)并指定reset_password_token。
您可以通过滚动自己的密码控制器来更改此行为。 您可以通过继承devise的控制器并覆盖编辑方法来实现此操作,以便它实际加载您的资源(可能是用户)。
从我的头脑中,这样的事情可以发挥作用。
class CustomPasswordsController < Devise:: PasswordsController
def edit
reset_password_token = params[:reset_password_token]
self.resource = resource_class.find_by_reset_password_token(reset_password_token)
end
end
然后在您的routes.rb中,配置devise以使用您的自定义控制器
devise_for :users,
:controllers => {:passwords=>"custom_passwords"}
答案 1 :(得分:0)
我找到了答案:新设备有一个方法名with_reset_password_token
,通过重置密码令牌找到资源。
然后我在我的PasswordsController
def edit
super
@email = Company.with_reset_password_token(params[:reset_password_token]).email
end
这样做了,但非常感谢大家