基于Rails中的选择选项具有动态表单

时间:2014-02-20 07:25:21

标签: ruby-on-rails ruby-on-rails-4 simple-form

Rails或Simple_Form是否提供了一种简单的方式来显示&根据其他选项隐藏表单的不同部分?

这是首先用户选择城市的表单。

<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 %>

1 个答案:

答案 0 :(得分:3)

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

主HTML文件中的

<%=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

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

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