我在用户数据库中创建了一个表单,更改其密码,如下所示:
<%= 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”无效,它没有收到我点击的动作。我该如何解决?
答案 0 :(得分:2)
问题很可能是nested formed are not allowed in HTML。您已经定义了两种不同的形式,一种在另一种内部。第一个是通过调用const people = [
{
name: 'Mike Smith',
family: {
mother: 'Jane Smith',
father: 'Harry Smith',
sister: 'Samantha Smith'
},
age: 35
},
{
name: 'Tom Jones',
family: {
mother: 'Norah Jones',
father: 'Richard Jones',
brother: 'Howard Jones'
},
age: 25
}
];
const kalle= people.map(( {name: n, family: {father: f}})=> {
return [n,f]
});
console.log('Name: ' + n + ', Father: ' + f);
// "Name: Mike Smith, Father: Harry Smith"
// "Name: Tom Jones, Father: Richard Jones"
生成的。第二个由您的form_for
标记定义。因此,可能发生的情况是您的“提交”按钮也在提交内部表单上的字段。
通过查看代码,您似乎甚至不需要内部表单-您使用<form>
中的FormBuilder f
对象生成内部表单。但是,无论哪种方式,您都应该考虑重新排列表单,以免嵌套它们。
另外,请注意,您的HTML无效。您的结束form_for
标签位于</form>
的结束</div>
标签之前。
答案 1 :(得分:0)
您现在有2个表单,一个由form_for()创建,然后在html中定义另一个表单,该按钮不在html表单中,因此它不会提交这些字段。从您的html中删除该标签或在表单标签中移动按钮