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
这段代码仍远未优化,但它应该满足这个问题。