2010-02-11 28 views
3

如何在軌道頁面上關聯下拉菜單。這兩種下降都將來自數據庫。如何在軌道形式中關聯下拉菜單

例如,如果首先下拉是category(來自category表格)。第二下降,products,也來自數據庫,將基於選擇第一個下拉填充?

回答

3

您可以使用collection_select幫助程序創建下拉列表,並在一個下拉列表中選擇一個值,然後可以將ajax請求發送回控制器操作,以使用新的下拉列表和產品更新頁面的另一個元素,例如

<%= collection_select(:category, :some_category_method_name, 
    Category.all, :id, :category_name, 
    {:prompt => 'Select'}, 
    { :onchange => remote_function(:url => {:action => 'get_products'}, 
    :with => "'id=' + this.value")}) 
%> 
<div id='product_dropdown'></div> 

所以基本上上面的代碼做什麼,產生一個下拉類別和不斷變化的,從這個下拉選擇的值將發送到與所選類別的id的行動「get_products」的請求。然後在該方法中,您可以獲得具有該類別的所有產品,並使用具有產品下拉的新部分更新「product_dropdown」元素。

def get_products 
    @category = Category.find(params[:id) 
    render :update do |page| 
    page.replace_html 'product_dropdown', 
      :partial => 'partial_name_in_which_you_have_product_drop_down', 
      :locals => {:products => @category.products} 

    end 
end 

希望這應該讓你開始。

如果您不確定collection_select如何工作,那麼here is the docs

0

最簡單的就是使用一個Javascript小部件,它將提供一個分層菜單。

這是來自YUI的o ne。我確定還有其他基於其他工具包的其他人。