未定义的方法`where'为[2,7,15,16]:数组

时间:2014-01-22 12:06:01

标签: ruby arrays

我想要使用此代码排除一些我已经去过化的ID。 我使用Ancestry gem来提供可能性,以便在多个级别对每个类别进行分类。

@sub_ids = @category.child_ids #returns child ids for category           
@extracted_2= @sub_ids.select.with_index{|_,i| (i+1) % 3 == 0} #extracts each third id from array   

然后使用我希望从root id集合中获取的代码,将我确定的ID分别排除在外。

 @subcat = Category.where('id NOT in (?)', @extracted_2) #NOT WORKING 

我收到了这样的错误:

未定义的方法`其中'为[2,7,15,16]:数组

我相信这是因为数组没有这样的东西ID来确定它们的位置。 那么它如何才能解决?

我的观点用两个词来表示:我想将主数组分成两个不同的数组。

  1. 第一个由ID组成,我相信它们分别来自主阵列

  2. 第二个数组由来自主数组的ID组成,但第一个数组中没有任何ID。

  3. 控制器动作的完整代码:

     @params = params[:category]
    
        @title= "SIA Ecotechno - Products"
        scope = if params[:manufacturer_id]
            Manufacturer.find_by_name(params[:manufacturer_id])
      else
         Manufacturer
      end
    
           if params[:category].present?
              @category = Category.find_by_name(params[:category])           
              @sub_ids = @category.child_ids #atgriež visus child ids            
              @extracted_2= @sub_ids.select.with_index{|_,i| (i+1) % 3 == 0}  
              @sub_ids_left = @sub_ids.where('NOT in (?)',@extracted_2)    
              @subcat = Category.find('id NOT in (?)', @extracted_2)
    
           end
    
    
        @manufacturer_products = Product.where(:name=>@manu)
    
        @prods = Product.where("category_id = ?", @category).paginate(:per_page=>6, :page=> params[:page])w        
     if @category.blank?
     else
          @path = @category.path 
     end
    
        @first = Category.find(1)
        @root = @first.siblings
        @children1 = @first.children
        @second = Category.find(17)
        @children2 = @second.children
        @third = Category.find(33)
        @children3 = @third.children    
          respond_to do |format|
           format.html # index.html.erb
           format.json { render json: @products }
        end
    

    完整追踪:

    app/controllers/products_controller.rb:39:in `index'
    actionpack (3.2.13) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
    actionpack (3.2.13) lib/abstract_controller/base.rb:167:in `process_action'
    actionpack (3.2.13) lib/action_controller/metal/rendering.rb:10:in `process_action'
    actionpack (3.2.13) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
    activesupport (3.2.13) lib/active_support/callbacks.rb:425:in `_run__389026677__process_action__502411758__callbacks'
    activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `__run_callback'
    activesupport (3.2.13) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
    activesupport (3.2.13) lib/active_support/callbacks.rb:81:in `run_callbacks'
    actionpack (3.2.13) lib/abstract_controller/callbacks.rb:17:in `process_action'
    actionpack (3.2.13) lib/action_controller/metal/rescue.rb:29:in `process_action'
    actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
    activesupport (3.2.13) lib/active_support/notifications.rb:123:in `block in instrument'
    activesupport (3.2.13) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
    activesupport (3.2.13) lib/active_support/notifications.rb:123:in `instrument'
    actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
    actionpack (3.2.13) lib/action_controller/metal/params_wrapper.rb:207:in `process_action'
    activerecord (3.2.13) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
    actionpack (3.2.13) lib/abstract_controller/base.rb:121:in `process'
    actionpack (3.2.13) lib/abstract_controller/rendering.rb:45:in `process'
    actionpack (3.2.13) lib/action_controller/metal.rb:203:in `dispatch'
    actionpack (3.2.13) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
    actionpack (3.2.13) lib/action_controller/metal.rb:246:in `block in action'
    actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:73:in `call'
    actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
    actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:36:in `call'
    journey (1.0.4) lib/journey/router.rb:68:in `block in call'
    journey (1.0.4) lib/journey/router.rb:56:in `each'
    journey (1.0.4) lib/journey/router.rb:56:in `call'
    actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:612:in `call'
    warden (1.2.3) lib/warden/manager.rb:35:in `block in call'
    warden (1.2.3) lib/warden/manager.rb:34:in `catch'
    warden (1.2.3) lib/warden/manager.rb:34:in `call'
    actionpack (3.2.13) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
    rack (1.4.5) lib/rack/etag.rb:23:in `call'
    rack (1.4.5) lib/rack/conditionalget.rb:25:in `call'
    actionpack (3.2.13) lib/action_dispatch/middleware/head.rb:14:in `call'
    actionpack (3.2.13) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
    actionpack (3.2.13) lib/action_dispatch/middleware/flash.rb:242:in `call'
    rack (1.4.5) lib/rack/session/abstract/id.rb:210:in `context'
    rack (1.4.5) lib/rack/session/abstract/id.rb:205:in `call'
    actionpack (3.2.13) lib/action_dispatch/middleware/cookies.rb:341:in `call'
    activerecord (3.2.13) lib/active_record/query_cache.rb:64:in `call'
    activerecord (3.2.13) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'
    actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
    activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `_run__720771256__call__1059896576__callbacks'
    activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `__run_callback'
    activesupport (3.2.13) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
    activesupport (3.2.13) lib/active_support/callbacks.rb:81:in `run_callbacks'
    actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
    actionpack (3.2.13) lib/action_dispatch/middleware/reloader.rb:65:in `call'
    actionpack (3.2.13) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
    actionpack (3.2.13) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
    actionpack (3.2.13) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
    railties (3.2.13) lib/rails/rack/logger.rb:32:in `call_app'
    railties (3.2.13) lib/rails/rack/logger.rb:16:in `block in call'
    activesupport (3.2.13) lib/active_support/tagged_logging.rb:22:in `tagged'
    railties (3.2.13) lib/rails/rack/logger.rb:16:in `call'
    actionpack (3.2.13) lib/action_dispatch/middleware/request_id.rb:22:in `call'
    rack (1.4.5) lib/rack/methodoverride.rb:21:in `call'
    rack (1.4.5) lib/rack/runtime.rb:17:in `call'
    activesupport (3.2.13) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
    rack (1.4.5) lib/rack/lock.rb:15:in `call'
    actionpack (3.2.13) lib/action_dispatch/middleware/static.rb:63:in `call'
    railties (3.2.13) lib/rails/engine.rb:479:in `call'
    railties (3.2.13) lib/rails/application.rb:223:in `call'
    rack (1.4.5) lib/rack/content_length.rb:14:in `call'
    railties (3.2.13) lib/rails/rack/log_tailer.rb:17:in `call'
    thin (1.6.1) lib/thin/connection.rb:82:in `block in pre_process'
    thin (1.6.1) lib/thin/connection.rb:80:in `catch'
    thin (1.6.1) lib/thin/connection.rb:80:in `pre_process'
    thin (1.6.1) lib/thin/connection.rb:55:in `process'
    thin (1.6.1) lib/thin/connection.rb:41:in `receive_data'
    eventmachine-1.0.3-x86 (mingw32) lib/eventmachine.rb:187:in `run_machine'
    eventmachine-1.0.3-x86 (mingw32) lib/eventmachine.rb:187:in `run'
    thin (1.6.1) lib/thin/backends/base.rb:73:in `start'
    thin (1.6.1) lib/thin/server.rb:162:in `start'
    rack (1.4.5) lib/rack/handler/thin.rb:13:in `run'
    rack (1.4.5) lib/rack/server.rb:268:in `start'
    railties (3.2.13) lib/rails/commands/server.rb:70:in `start'
    railties (3.2.13) lib/rails/commands.rb:55:in `block in <top (required)>'
    railties (3.2.13) lib/rails/commands.rb:50:in `tap'
    railties (3.2.13) lib/rails/commands.rb:50:in `<top (required)>'
    script/rails:6:in `require'
    script/rails:6:in `<main>'
    

1 个答案:

答案 0 :(得分:2)

替换此行(第14行):

@sub_ids_left = @sub_ids.where('NOT in (?)',@extracted_2)

用这个:

@sub_ids_left = @sub_ids - @extracted_2