0

1.我**視圖/演出/ new.html.erb我使用顯示所選類別的子類別中的Rails 4

<%= f.collection_select :category_id, Category.all, :id, :name, {prompt: "Choose a category"} %> 
<%= f.collection_select :subcategory_id, Subcategory.all, :id, :name, {prompt: "Choose a subcategory"} %> 

它創建這個

dropdown category and subcategory

並點擊下面的圖片:

the dropdown categories and subcategories

從上面的圖片可以看出,根據我選擇的類別,只顯示該類別擁有的子類別。

2.在我的這個工作的演出控制器,我寫了下面的代碼。

def update_sub_categories 
    @cats = Subcategory.where(category_id: params[:category_id]).all 
    respond_with(@cats) 
end 

我曾在同一文件夾中創建一個文件視圖/演出/ update_sub_categories ,並把這個代碼

$("#gig_subcategory_id").empty().append("<%= escape_javascript(render(:partial => "subcategory", :collection => @cats, :as => :cat)) %>") 

而且部分在同一文件夾v IEW /gigs/_subcategory.html.erb

<option value="<%= cat.id %>"><%= cat.name %></option> 

4.添加在應用程序/ JavaScript的/ gigs.js.coffee

$(document).on 'change', '#gig_category_id', (evt) -> 
    $.ajax 'update_sub_categories', 
     type: 'GET' 
     dataType: 'script' 
     data: { 
     category_id: $("#gig_category_id option:selected").val() 
     } 
     error: (jqXHR, textStatus, errorThrown) -> 
     console.log("AJAX Error: #{textStatus}") 
     success: (data, textStatus, jqXHR) -> 
     console.log("Dynamic country select OK!") 

5.終於在路線

get 'gigs/update_sub_categories' => 'gigs#update_sub_categories' 

問:一切正常,我選擇了所選類別的類別和子類別,但它僅在有效views/gigs/new.html.erb,並沒有在views/gigs/edit.html.erb,我做錯了什麼?

+0

你的'edit.html.erb'包含了什麼?你的意思是什麼不起作用? – Pavan

回答

1

查看您的控制檯或development.log,您將看到一些消息,指出當腳本失敗時,導軌無法解析update_sub_categories。當用一種新的形式調用該方法時,你會看到軌道正在調用your_controller/your_action/update_sub_categories - 你可能會看到現在的位置。

你將不得不更新您的routes.rb既要處理一個「裸」方法調用(當它缺少your_action和成員路由。成員路由的顯式處理是必要的,因爲你的編輯使用嵌入的ID場在路線中,而不是在最後附加。

用以下內容替換當前的路由在routes.rb,你應該在良好的狀態:

get 'update_sub_categories' => 'your_model#update_sub_categories' 

    get 'your_model/update_sub_categories' => 'your_model#update_sub_categories' 

    resources :your_model do 
    get :update_sub_categories, :on => :member 
    end 

很明顯,你會想取代你的型號名稱在我的例子字符串your_model