为什么在尝试使用f.submit时不起作用?

时间:2020-07-13 14:38:38

标签: html css ruby-on-rails

我在用户数据库中创建了一个表单,更改其密码,如下所示:

<%= 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”无效,它没有收到我点击的动作。我该如何解决?

2 个答案:

答案 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中删除该标签或在表单标签中移动按钮