过滤类别

在我的应用程序中,我有一个提供者列表,每个提供者都有类别。 我的模型如下:

class Categorization < ApplicationRecord belongs_to :category belongs_to :provider end class Category < ApplicationRecord has_many :categorizations has_many :providers, through: :categorizations accepts_nested_attributes_for :categorizations end class Provider < ApplicationRecord has_many :categorizations has_many :categories, through: :categorizations accepts_nested_attributes_for :categorizations end 

在一个视图中,我有2个ul列表。 第一个是提供者列表,第二个是类别列表。 看起来像:

   

当我没有rails实现时,当我点击提供者时(它也是硬编码的,以及类别),我可以看到,类别被过滤了。 它是由js制作的:

 var $btns = $('.btn-up').click(function () { if(this.id == 'a') { $('#parent > li#aside_1').fadeIn(450); $('#parent > li').not($('#parent > li#aside_1')).hide(); } else { var $el = $('.' + this.id).fadeIn(450); $('#parent > li').not($el).hide(); } $btns.removeClass('active'); $(this).addClass('active'); }) 

所以,问题是如何使filter工作,所以当我点击一个提供者时,它只会显示属于该提供者的类别? 谢谢。

Ajax是做这类事情的最佳方式。

恩。

 var $btns = $('.btn-aside').click(function () { var provider_id = 'get selected provider via JS' $.ajax({ type: "POST", url: "/some_url_of_controller_method", data: { provider: provider_id }, success: function(data) { $('.btn-up').empty() $.each(data, function(){ $('.btn-up').append('') ) }, error: function(data) { return false; } }); }) 

SomeContoller.rb

 def some_method @provider = Provider.find_by_id(params[:provider]) @categories = @provider.categories respond_to do |format| format.json { render json: @categories} end end 

因此,您可以采取一种方法来实现这一目标。

每次单击提供程序以获取其关联类别并使用JQuery将其附加到HTML时,您都可以发送AJAX请求。

代码非常精细,可以粘贴到此处,因此我建议您浏览此video,了解其工作原理并以适合您的方式实施。

Ryan Bates在下面的video中很好地解释了这个概念。

https://www.youtube.com/watch?v=FBxVN7U1Qsk