Rails 3,使用select标签中的选择更新数据

时间:2011-05-22 17:34:12

标签: ruby-on-rails ruby-on-rails-3 model-view-controller

我对rails很熟悉,但对Spring和.net这样的“常规”MVC编程非常熟悉。我正在努力应对所有这些新方法,但我一直陷入困境 - 特别是在使用不同的数据渲染/刷新相同的视图时,基于用户的选择。

这一切都非常简单,而且我可以看到它已被问过很多次 - 虽然,我似乎无法找到任何明确的,“这是做这件事的铁路方式”答案。

我想做的就是这样:

数据库“方案”,表a,b,c及其参考文献:
C - >一个
C - > B

根据下拉列表中的B选择,我想显示所有“A的C” - 不介意查询部分,这是直截了当的。 到目前为止,我选择第一个B作为控制器中页面的“第一个渲染”,但是当用户在下拉列表中选择另一个B时,应根据选择重新渲染视图...
我不想使用自定义javascript填充或其他一些“怪异”的方式。我必须能够根据RoR中的选择选择一些内容并刷新视图。

我希望你能帮助我或指出我正确的方向。

谢谢!

2 个答案:

答案 0 :(得分:1)

将所有这些选择列表放在一个表单中,并在列表的'onchange'事件中添加提交表单的javascript($('form_name')。submit())。提交表单后,您将所有选定的值都设为params(params [:select_list_1],params [:select_list_2])。根据需要处理它们,触发查询并再次显示视图。

您可以将表单提交给同一个操作。行动将是这样的:

def index
  if !request.post?
    # Generate default values
  else
    # Generate new resultset based on params
  end
end

编辑(表单示例):表单可以添加为和:url指定表单元素的操作:

<%= form_for(:select_list_form, :url => {:controller => "my_controller", :action => "index"}) do |f| %>
<!-- Your select list here -->
    <%= f.submit "Continue", :class => "form-button form-left" %>
<% end %>
<!-- Render data based on your instance variables -->

答案 1 :(得分:0)

我自己遇到过这个问题,我找到的最简洁的方法是使用它:

当选择列表更改时,它会调用ajax请求。然后,您必须在控制器中设置一个新操作,例如load_related:

def load_related
    @childreen = Model.where(....)
    render :update do |page|
         page.replace 'div id where you whant stuff to appear', :partial => '...'
    end
end

这是你在Rails中的第一个ajax请求。有关文档: