2011-05-22 70 views
0

我都是新来的rails,但对Spring和.net等“常规”MVC编程非常熟悉。我试图应付所有这些新的做事方式,但我一直陷入困境 - 尤其是当涉及到根据用户的选择渲染/刷新具有不同数据的相同视图时。Rails 3,使用选择标记中的选择来更新数据

这确实很简单,而且我可以看到它已经被问了很多次 - 尽管我似乎找不到任何明确的答案,并且“这是做这件事的方式”。

所有我想要做的是这样的:

数据库 “方案”,以表A,B,C和它们的引用:
Ç - >一个
Ç - >乙

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

我希望你能够帮助我,或者指引我走向正确的方向。

谢谢!

回答

1

把所有这些选择列表的形式,并在列表中的“的onchange”事件中添加JavaScript代码提交表单($(“FORM_NAME”)提交( ))。提交表单后,您将所有选定的值都设为参数(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 

EDIT(表格为例):表单可以添加和: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 --> 
+0

好了,就快了。 – Hoof 2011-05-22 18:36:23

+0

当你到达那里时不要忘记upvote ......;) – 2011-05-22 19:10:08

+0

当然不是! - 刚刚还没有使它的工作:P 你可以请显示一些更多的代码?我可以让表格正确提交..如果我提交它,它会抱怨我没有创建方法 - 我知道它的标准粗糙,但是我不需要在这里创建任何东西...... 我在form_tag action => my_action中获得了选择标记。 – Hoof 2011-05-22 19:18:49

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请求。对于文档: