Rails:单击下拉选项时提交(通过AJAX)
选择下拉框选项时,自动提交AJAX表单的最简单,最优雅的方法是什么? 我正在创建一个管理页面,管理员可以在其中修改用户权限(“权限”存储为整数),我希望“权限”字段是一个下拉框,当管理员自动提交和更新时点击他希望用户拥有的选项。
这是我目前正在看的精简版。 我需要知道将其转换为远程表单的最佳方法,该表单在单击选项时自动提交。
随意指出任何切向性的建议或其他任何东西……我对Rails相对较新,只是达到了我可以编写代码而无需不断引用其他人的工作的程度。
有几种方法可以解决这个问题。 当然观察场方法是一种,但您也可以使用简单的javascript或remote_function来实现:
这是简单的JS方法:
<% remote_form_for membership do |f| %> <%= f.select :permissions, [['none', 0], ['admin', 9]], {}, :onchange => 'this.form.submit()' %> <% end %>
另一种方式是这样的,并且会避开表单构建器(这可能有几个语法错误):
<%= select_tag(:permissions, [['none', 0], ['admin', 9]], {:onchange => "#{remote_function(:url => permissions_path(:story_id => story, :with => "'permission='+value")}"})
我个人更喜欢前者。
三步!
- 使您的
form_for
为remote_form_for
; 添加一个id! -
select
后添加observe_field
- 配置您的
observe_field
以提交表单
最后一点看起来像:
<%= observe_field "id_of_select", :function => "$('form_id').submit();" %>
在Rails 3中:
<%= form_for(membership, :remote => true) do |f| %>` <%= f.select :permissions, [['none', 0], ['admin', 9]], {}, :onchange => 'this.form.submit();' %> <% end %>
请注意,它是this.form.submit();
不是在提交。 并且不要忘记Javascript分号。
使用您选择的框架学习如何在没有Rails的情况下完成它。 使用Rails标签执行AJAX可以快速完成任务,但是当您需要更改有关标签执行方式的特定事项时,可能会非常有限。
阅读有关网络标准以及如何在这些网站上编写不引人注目的JavaScript: http : //ajaxian.com/ http://www.alistapart.com/
通过学习如何在没有Rails的情况下执行AJAX,您将能够创建更灵活,更精彩的UI。
我正在使用Rails 5而且我也遇到了类似的情况但是在我的情况下@scott给出的答案并没有像预期的那样使用AJAX
提交表单虽然我在表单中添加了remote: true
选项(我没有submit
表格中的按钮)。
如果有人也面临类似的问题,试着像这样改变JS代码 –
<% form_for membership remote: true, id: '#member_form' do |f| %> <%= f.select :permissions, [['none', 0], ['admin', 9]], onchange: '$("#member_form").trigger("submit");' %> <% end %>
希望这可以帮助..