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