在Rails 4中显示所选类别的子类别

1.在我使用的** view / gigs / new.html.erb中

  

它创造了这个

下拉类别和子类别

点击下图时:

下拉类别和子类别

根据您选择的类别,从上图中可以看到,只显示该类别拥有的子类别。

2.在我的gig控制器中,我可以编写下面的代码。

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

3.我必须在相同的文件夹视图/ gigs / update_sub_categories中创建一个文件并放入此代码

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

也是同一文件夹中的部分视图/ ig / _subcategory.html.erb

 <option value=""> 

4.添加App / 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中 ,是什么我做错了?

查看您的控制台或development.log,您将看到一些消息,指示当脚本失败时rails无法解析update_sub_categories 。 当使用新表单调用该方法时,您会看到rails正在调用your_controller/your_action/update_sub_categories – 您可能会看到它现在的位置。

您将不得不更新您的routes.rb以处理对方法的“裸”调用(当它缺少your_action和成员路由时。显式处理成员路由是必要的,因为您的编辑使用嵌入在路线,而不是在最后附加它。

用以下内容替换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您的模型名称替换为字符串your_model