ruby-on-rails – 仅显示所选类别的子类别
这是我目前的代码:
<%= f.collection_select :category_id,Category.all,:id,:name,{prompt: "Choose a category"} %> <%= f.collection_select :subcategory_id,Subcategory.all,{prompt: "Choose a subcategory"} %> 它只是在一个下拉列表中显示所有类别,在另一个下拉列表中显示所有子类别.
一切都在模型中链接,has_many和belongs_to …以及category_id和subcategory_id..everything正常工作,我只是不知道如何在所选类别中显示特定的子类别. 我的尝试: <% if (Category.where(:name=>"Intro")) do |d| %> <% d.subcategories.each do |subcategory| %> <%= link_to subcategory.name,gigs_path(subcategory: subcategory.name) %> <% end %> <% end %> 此代码出错.我要说,例如,如果用户选择名为“简介”的类别而不是列出所有“简介子类别”.但它没有成功 – 我的代码显然是错误的. 谢谢. 解决方法
我假设您希望在不重新加载页面的情况下发生这种情况?那么你不会得到一些JavaScript.这是一般工作流程:
>更改类别下拉列表时,发送一个Ajax请求,该请求将使用JavaScript响应并将正确的值插入子类别下拉列表中. 为了这个例子,我将假设您的表单(属于某个类别的模型)是一个帖子.你似乎没有提到这个模型. 我们试试这个: 意见/职位/ _form: <%= f.collection_select :category_id,{ prompt: "Choose a category" },id: "category_id" %> <div id="subcategories_select"> <%= f.collection_select :subcategory_id,{ prompt: "Choose a subcategory" },{ disabled: true } %> </div> 资产/ Java脚本/ posts.js.erb # select the element to watch for changes $('form').on('change','#category_id'),function() { var category_id = $(this).val(); # save the category_id set in the first dropdown $.ajax({ url: "/categories/" + category_id + "/get_subcategories",# a custom route,see routes.rb further down type: "GET",dataType: "script",# we expect a response in js format data: { "category_id": category_id } # the only value we will need to get the subcategories }); }); 配置/ routes.rb中 # we need a custom route for our get_subcategories action resources :categories do member do get :get_subcategories,defaults: { format: "js" } end end 控制器/ posts_controller.rb # our custom controller action def get_subcategories @subcategories = Subcategory.where(category_id: params[:category_id]) end 应用程序/视图/职位/ get_subcategories.js.erb $('#subcategories_select').html("<%= j collection_select(:post,:category_id,@subcategories,:title),{ prompt: 'Select subcategory...' },{ disabled: false } %>"); 请注意我从头顶做了这个,所以可能有错误,但这是动态填充选择框的一种方法,或者通常在不重新加载的情况下更改页面上的任何内容. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |