我创建了一个表单到我的用户数据库更改他的密码,如下所示:
<%= form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %>
<%= devise_error_messages! %>
<%= f.hidden_field :reset_password_token %>
<div class="container">
<form action="/action_page.php">
<%= f.label :password, "Nova senha" %><br />
<% if @minimum_password_length %>
<em>(Mínimo de <%= @minimum_password_length %> caracteres)</em><br />
<% end %>
<%= f.password_field :password, autofocus: true, autocomplete: "off" %>
</div>
<div class="container">
<%= f.label :password_confirmation, "Confirmar nova senha" %><br />
<%= f.password_field :password_confirmation, autocomplete: "off" %>
</form>
</div>
<div class="actions">
<%= f.submit "Alterar minha senha" %>
</div>
<% end %>
问题是我的f.submit“alterar minha senha”不工作,它没有收到我点击的动作。 我该怎么修好呢?
您现在有两个表单,一个由form_for()创建,然后在html中定义另一个表单按钮不在html表单中,因此它不会提交这些字段。 从html中删除标记或在表单标记中移动按钮
问题很可能是HTML中不允许嵌套格式。 您已经定义了两个单独的窗体,一个在另一个内部。 第一个是通过调用form_for
生成的。 第二个是由标记定义的。 因此,可能发生的情况是您的submit按钮也在提交内部表单上的字段。
通过查看代码,您似乎甚至不需要内部表单--您使用form_for
中的FormBuilderf
对象来生成内部表单。 但是,无论哪种方式,您都应该考虑重新排列窗体,使它们不是嵌套的。
另外,附带说明的是,您的HTML是无效的。 您的结束标记位于
.container
的结束