改写
我有2个模型。应用程序和对话。一个应用包含多个对话
resources :apps do
resources :conversations
end
我有一个单一的视图,上面有 2 个表单,使用标签的表单。第一种形式用于更新应用模型。另一个用于创建或更新对话。
我遇到的问题是,当我使用 form_for 标记时,生成的 html 不会生成 _method 输入。
EG 对话表。
<form accept-charset="UTF-8" action="/apps/50c87614e976a31149000009/conversations" class="new_conversation ng-pristine ng-valid" id="new_conversation" method="post">
<div style="margin:0;padding:0;display:inline">
<input name="utf8" type="hidden" value="✓">
<input name="authenticity_token" type="hidden" value="RqwwgBb737uuwg3PgRS+z0qlOP1aDqWe+2hrEeU0KHk=">
</div>
申请表
<form accept-charset="UTF-8" action="/apps/50c87614e976a31149000009" class="edit_app ng-pristine ng-valid" enctype="multipart/form-data" id="edit_app_50c87614e976a31149000009" method="post">
<div style="margin:0;padding:0;display:inline">
<input name="utf8" type="hidden" value="✓">
<input name="_method" type="hidden" value="put">
<input name="authenticity_token" type="hidden" value="RqwwgBb737uuwg3PgRS+z0qlOP1aDqWe+2hrEeU0KHk="></div>
现在让我们只关注对话模型,因为这是有问题的模型。
从上面的 html 中,您会期望 Conversation 表单应该发送一个 post 请求。不幸的是,当它被 rails 应用程序接收时,它被视为 puts 请求。
查看 form_for 的文档,我知道 form_for 应该设置一个名为 _method 的隐藏输入字段。
如果您查看 Conversation 表单并将其与 App 表单进行比较,您可以看到该会话没有 _method 属性。我无法确定这是为什么。
有没有人知道为什么这被忽略了?或者为什么当我提交对话表单时,发送的是 put 而不是 post?