NoMethodError(未定义的方法`’为nil:NilClass):使用jquery-datatables-rails

我一直在尝试按照这些说明对jquery-datatables进行过滤。

在我添加filter之前,它返回数据表所需的json而没有任何问题,但现在我收到上述错误并且无法识别问题。

def index respond_to do |format| format.html format.json do @sbcons = Subcontractor.scoped filters = params[:filter] @sbcons = @sbcons.where(sbcon_type: filters[:type]) unless filters[:type].nil? or filters[:type].blank? @sbcons = @sbcons.where(cscs_card: filters[:cscs]) unless filters[:cscs].nil? or filters[:cscs].blank? @sbcons = @sbcons.where(approved_status: filters[:approved]) unless filters[:approved].nil? or filters[:approved].blank? render json: SubcontractorsDatatable.new(view_context, @sbcons) end end end  

Subcontractors List



<table id="subcontractors" class="table table-condensed table-hover display" data-source=""> Name Contact Number CSCS Type Scotland NE England NW England Midlands SE England SW England London Wales Operatives Product Liability Employer Liability Public Liability Contractors All Risk Status $('#filterbutton').click(function (){ $('#subcontractors').dataTable().fnDraw(); });

编辑:

NoMethodError( []' for nil:NilClass): app/controllers/subcontractors_controller.rb:31:in未定义方法[]' for nil:NilClass): app/controllers/subcontractors_controller.rb:31:in在索引’app / controllers / subcontractors_controller.rb []' for nil:NilClass): app/controllers/subcontractors_controller.rb:31:in块(2级)中:26:在’index’中

第31行:@sbcons = @ sbcons.where(sbcon_type:filters [:type])除非filter[:type] .nil? 或filter[:type] .blank?

第26行:respond_to do | format |

将所有业务逻辑移出respond_to块之上和之上。 该块应仅包含呈现视图所需的代码。

另外,你不需要两个.nil?.blank? 条件句。 .blank? 无论如何都要检查是否为零。

在进行任何进一步设置之前,请检查filters是否为零。 使用条件块,如图所示。

您的索引操作应如下所示:

 def index @sbcons = Subcontractor.scoped if filters = params[:filter] @sbcons = @sbcons.where(sbcon_type: filters[:type]) unless filters[:type].blank? @sbcons = @sbcons.where(cscs_card: filters[:cscs]) unless filters[:cscs].blank? @sbcons = @sbcons.where(approved_status: filters[:approved]) unless filters[:approved].blank? end respond_to do |format| format.html format.json do render json: SubcontractorsDatatable.new(view_context, @sbcons) end end end 

这段代码仍远未优化,但它应该满足这个问题。