在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
。