过滤类别
在我的应用程序中,我有一个提供者列表,每个提供者都有类别。 我的模型如下:
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中很好地解释了这个概念。