Max*_*Max 2 rest ruby-on-rails form-helpers
我正在尝试创建一个表单,用作控制器上的destroy方法的确认.在我的路线中,我有:
resources :leagues do
get 'delete', :on => :member
end
Run Code Online (Sandbox Code Playgroud)
在我的delete.html.erb中,我有以下内容:
<% form_for current_league, :html => {:method => :delete} do |form| %>
<%= form.submit 'Yes' %>
<%= form.submit 'No', :name => 'cancel' %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
current_league是一个由以下定义的辅助函数:
def current_league
@current_league ||= League.find_by_id(params[:id])
end
Run Code Online (Sandbox Code Playgroud)
所以问题在于生成的表单只编辑联盟模型,如form 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="✓" />
<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>
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
我认为这已经有效了.如在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>
Run Code Online (Sandbox Code Playgroud)
读取此变量时,rails知道这是DELETE方法,而不是POST方法.即使它自己的形式是一个POST.
| 归档时间: |
|
| 查看次数: |
4943 次 |
| 最近记录: |