在 Rails 4 中显示所选类别的子类别
Show the subcategories of the chosen category in Rails 4
1.在我的 **view/gigs/new.html.erb 我使用
<%= 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"} %>
它创造了这个
点击下图时:
根据我选择的类别,如上图所示,仅显示该类别拥有的子类别。
2. 在我的 gig 控制器中为了让它工作,我写了下面的代码。
def update_sub_categories
@cats = Subcategory.where(category_id: params[:category_id]).all
respond_with(@cats)
end
3. 我必须在同一文件夹中创建一个文件 view/gigs/update_sub_categories
并输入此代码
$("#gig_subcategory_id").empty().append("<%= escape_javascript(render(:partial => "subcategory", :collection => @cats, :as => :cat)) %>")
还有同一文件夹中的部分 view/gigs/_subcategory.html.erb
<option value="<%= cat.id %>"><%= cat.name %></option>
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'
Question: Everything works, i choose the category and the subcategory of the chosen category appear.But it works just in
views/gigs/new.html.erb,and doesn't in views/gigs/edit.html.erb, what am I doing wrong?
查看您的控制台或 development.log,当您的脚本失败时,您会看到一些消息表明 rails 无法解析 update_sub_categories
。当使用新表单调用该方法时,您会看到 rails 正在调用 your_controller/your_action/update_sub_categories
—— 您现在可能会看到它的去向。
你将不得不更新你的 routes.rb
来处理对方法的 "naked" 调用(当它丢失时 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
。
1.在我的 **view/gigs/new.html.erb 我使用
<%= 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"} %>
它创造了这个
点击下图时:
根据我选择的类别,如上图所示,仅显示该类别拥有的子类别。
2. 在我的 gig 控制器中为了让它工作,我写了下面的代码。
def update_sub_categories
@cats = Subcategory.where(category_id: params[:category_id]).all
respond_with(@cats)
end
3. 我必须在同一文件夹中创建一个文件 view/gigs/update_sub_categories 并输入此代码
$("#gig_subcategory_id").empty().append("<%= escape_javascript(render(:partial => "subcategory", :collection => @cats, :as => :cat)) %>")
还有同一文件夹中的部分 view/gigs/_subcategory.html.erb
<option value="<%= cat.id %>"><%= cat.name %></option>
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'
Question: Everything works, i choose the category and the subcategory of the chosen category appear.But it works just in views/gigs/new.html.erb,and doesn't in views/gigs/edit.html.erb, what am I doing wrong?
查看您的控制台或 development.log,当您的脚本失败时,您会看到一些消息表明 rails 无法解析 update_sub_categories
。当使用新表单调用该方法时,您会看到 rails 正在调用 your_controller/your_action/update_sub_categories
—— 您现在可能会看到它的去向。
你将不得不更新你的 routes.rb
来处理对方法的 "naked" 调用(当它丢失时 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
。