2014-02-20 128 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

相關問題