更新基于另一个的选择框(Ruby on Rails)

时间:2009-12-18 02:43:20

标签: ruby-on-rails rjs

我需要一个更完整的示例,介绍如何根据Ruby on Rails中第二个选择框的结果更新选择框。我已经问过here了。我已经阅读了该帖子的反馈意见,但是没有任何运气可以解决这个问题,而且我已经尝试了几个小时。有人知道一个更好(更完整)的例子吗?

1 个答案:

答案 0 :(得分:1)

这通常在Javascript中处理。我并不特别喜欢编写Javascript,所以我在我的应用程序中为此做的是使用form_observer(使用Prototype Javascript库的Rails助手来观察输入更改的表单)并在HTML中更新DIV第二个选择框,基于AJAX调用的结果。由于AJAX与我的服务器通信,我可以在Ruby中编写任意复杂的逻辑来呈现新的HTML。

示例代码:

#goes in view
<%= Code to render the first list box. %>
<%= render :partial => 'second_list_box_partial', :locals => {:selected = insert_magic_here } %>

<%= observe_field(:first_list_box,
    :url => { :action => :second_box_ajax }),
    :frequency => 0.5,
    :update => :second_list_box_div,
    :with => %Q| 'value=' + $('first_list_box').value;   |
    %>

#goes in controller
 def second_box_ajax
   first_box_value = params[:value]
   #magic goes here
   @selected = #more magic
   render :partial => 'second_list_box_partial', :locals => {:selected => @selected}, :layout => false
 end

 #goes in partial
 <div id="second_list_box_div">
   Actual code to render list box goes here.
 </div>