【问题标题】:How to create a delete form with RESTful routes in Rails.如何在 Rails 中使用 RESTful 路由创建删除表单。
【发布时间】:2011-08-10 03:41:37
【问题描述】:

我正在尝试创建一个表单来确认控制器上的 destroy 方法。在我的路线中,我有:

resources :leagues do
  get 'delete', :on => :member
end

在我的 delete.html.erb 中,我有以下内容:

<% form_for current_league, :html => {:method => :delete} do |form| %>
  <%= form.submit 'Yes' %>
  <%= form.submit 'No', :name => 'cancel' %>
<% end %>

current_league 是由以下定义的辅助函数:

def current_league
  @current_league ||= League.find_by_id(params[:id])
end

所以问题是生成的表单只编辑联赛模型,如表单method="post"所示。

<form accept-charset="UTF-8" action="/leagues/1" class="edit_league" id="edit_league_1" method="post">
  <div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" />
    <input name="_method" type="hidden" value="delete" />
    <input name="authenticity_token" type="hidden" value="abcdefg" />
  </div>  
  <input id="league_submit" name="commit" type="submit" value="Yes" /> 
  <input id="league_submit" name="cancel" type="submit" value="No" /> 
</form> 

我该如何解决这个问题?

【问题讨论】:

    标签: ruby-on-rails rest form-helpers


    【解决方案1】:

    我认为这已经奏效了。就像在 Rails 指南中一样 http://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-patch-put-or-delete-methods-work-questionmark

    但是,在提交表单时,大多数浏览器不支持“GET”和“POST”以外的方法。

    Rails 通过使用名为“_method”的隐藏输入在 POST 上模拟其他方法来解决此问题,该输入被设置为反映所需的方法:

    正如您在输出表单中看到的那样

    <form accept-charset="UTF-8" action="/leagues/1" class="edit_league" id="edit_league_1" method="post">
        ....
        <input name="_method" type="hidden" value="delete" />
        ....
    </form>
    

    当读取这个变量时,rails 明白这是一个 DELETE 方法,而不是 POST 方法。即使它自己的表单是 POST。

    【讨论】:

    • 我不敢相信我没有注意到我收到的错误 >_> 很抱歉浪费您的时间,感谢您指出这一点。我收到模板丢失错误,并认为它正在调用更新操作。
    猜你喜欢
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多