Rails:单击下拉选项时提交(通过AJAX)

时间:2009-02-25 16:35:25

标签: ruby-on-rails ajax ajax-forms remote-forms

选择下拉框选项时,自动提交AJAX表单的最简单,最优雅的方法是什么?我正在创建一个管理页面,管理员可以在其中修改用户权限(“权限”存储为整数),我希望“权限”字段是一个下拉框,当管理员自动提交和更新时点击他希望用户拥有的选项。

这是我目前正在看的精简版。我需要知道将其转换为远程表单的最佳方法,该表单会在单击选项时自动提交。

随意指出任何切向性建议或其他任何内容......我对Rails相对较新,只是达到了我可以编写代码而无需不断引用他人工作的程度。

<!-- This is the "index" view, by the way. -->
<% for membership in @story.memberships %>
  <% form_for membership do |f| %>
    <%= f.select :permissions, [['none', 0], ['admin', 9]] %>
  <% end %>
<% end %>

5 个答案:

答案 0 :(得分:15)

有几种方法可以解决这个问题。当然观察场方法是一种,但您也可以使用简单的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")}"})

我个人更喜欢前者。

答案 1 :(得分:4)

三个步骤!

  1. form_for成为remote_form_for;添加一个id!
  2. select
  3. 之后添加observe_field
  4. 配置observe_field以提交表单
  5. 最后一点看起来像:

    <%= observe_field "id_of_select", :function => "$('form_id').submit();" %>
    

答案 2 :(得分:4)

在Rails 3中:

<%= form_for(membership, :remote => true) do |f| %>`
  <%= f.select :permissions, [['none', 0], ['admin', 9]], {}, :onchange => 'this.form.submit();' %>
<% end %>

请注意,this.form.submit();不是onsubmit。并且不要忘记Javascript分号。

答案 3 :(得分:3)

使用您选择的框架了解如何在没有Rails的情况下执行此操作。使用Rails标签执行AJAX可以快速完成任务,但是当您需要更改标签的执行方式时,可能会非常有限。

了解网络标准以及如何在这些网站上编写不引人注目的JavaScript: http://ajaxian.com/ http://www.alistapart.com/

通过学习如何在没有Rails的情况下执行AJAX,您将能够创建更灵活,更精彩的UI。

答案 4 :(得分:1)

我正在使用Rails 5&amp;我也面临着类似的情况,但在我的情况下,@ scott给出的答案并未按预期使用AJAX提交表单,尽管我在表单中添加了remote: true选项(我没有{表格中的{1}}按钮。

如果有人也遇到类似问题,请尝试更改这样的JS代码 -

submit

希望这会有所帮助..