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