更新对象时,我们应:method => :put
覆盖表单中的post
,如下所示:
<%= simple_form_for @task, :url => update_task_url, :method => :put do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :name %>
<%= f.input :description %>
</div>
<div class="form-actions">
<%= f.submit 'Update Task'%>
</div>
<% end %>
<%= link_to 'Back', tasks_path %>
在发出请求之前的控制器中,我试图渲染参数以检查一切是否正确如下:
render text: tasks_params
uri = URI.parse("http://localhost/tasks/public/api/tasks/"+params[:id])
response = Net::HTTP.post_form(uri, task_params)
render text: response.body
但是如果没有_method
属性,我会得到以下内容:
{"name"=>"Task#1", "description"=>"lorem ipsum"}
因此在服务器端请求不成功。 我到底错过了什么?
答案 0 :(得分:0)
您应该发布到所需的控制器操作
<%= simple_form_for @task, :url => update_task_url, :method => :post do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :name %>
<%= f.input :description %>
</div>
<div class="form-actions">
<%= f.submit 'Update Task'%>
</div>
<% end %>
我会在您update
的{{1}}操作中添加一个调试器断点,以确保您选择正确的路线。