2014-02-20 92 views
2

Rails或Simple_Form提供了一种简单的方法来显示&根据其他选项隐藏表单的不同部分?根据Rails中的选择选择一个动态表单

这里是首先用户选择一个城市的形式。

<div class="form-group"> 
    <%= m.association :city, class: "form-control" %> 
</div> 

然后根据选定的城市,我只想显示与这个城市相关的街区。目前,我遍历所有城市,我正在考虑为某个城市的所有复选框添加一个类,并在城市选择时使用JS隐藏它们。这听起来很诡异。你知道更好的选择吗?

<% City.all.each do |city| %> 
    <%= m.association :neighborhoods, as: :check_boxes, 
     collection: 
      Neighborhood.joins(:city) 
       .where("cities.name = ?", city.name) 
       .order(name: :asc) 
    %> 
<% end %> 

回答

3

我不认为有一个超级简单的方法来做到这一点与Rails。但是有一种更优雅的方式来处理JS更新。您可以使用AJAX调用来根据所选城市更新您的复选框div的邻域偏好。它看起来像这样(你必须填写你的代码和我的代码之间的差距):

<%=javascript_tag do%> 
    $("#city-select").change(function(){ 
     var city_id = $(this).val(); 
     url = '/cities/'+city_id+'/get_neighbor_checkboxes'; 
     $.get(url, function(data){$('#checkbox_div').html(data)}); 
    }); 
<%end%> 

控制器:

def get_neighbor_checkboxes 
    @neighborhoods = Neighborhood.find_by(:city_id => params[:id]) 
    # or whatever query you need to get your neighborhoods 
    render :partial => 'checkboxes', :layout => nil 
end 

在主HTML文件

最后,“checkboxes.html.erb”局部视图:

<%@neighborhoods.each do |n|%> 
    # add your checkbox for each neighborhood n 
<%end%> 
+0

我不得不以某种方式通过表单生成器,虽然在checkboxes.html.e RB。那可能吗? –

+0

我不认为你可以通过表单生成器。最好的方法可能是使用check_box_tag,并检查分配给表单构建器中示例复选框的'name'和'id'。然后在check_box_tag中手动分配这些选项。或者,使用HTML而不是帮助程序添加复选框可能会更容易。无论哪种方式,它应该很快。 –

+0

我认为你也需要一条路径 – Tom

相关问题