代码之家  ›  专栏  ›  技术社区  ›  Qwertie

在spree中进行搜索,忽略真/假

  •  0
  • Qwertie  · 技术社区  · 7 年前

    我正在努力寻找spree中的所有变体 is_master false /api/v1/variants?q[is_master_true]='0' 获取所有非主变体。

    documentation

    >> User.ransack(awesome_false: '1').result.to_sql
    => SELECT "users".* FROM "users"  WHERE ("users"."awesome" = 'f')
    

    在实践中

    > Spree::Variant.ransack(is_master_false: '1').result.to_sql
    => "SELECT \"spree_variants\".* FROM \"spree_variants\" WHERE \"spree_variants\".\"deleted_at\" IS NULL" 
    

    is_master_false 在sql中被忽略

    另一个搜索类似 sku_eq 工作正常

    > Spree::Variant.ransack(sku_eq: '17636').result.to_sql
    => "SELECT \"spree_variants\".* FROM \"spree_variants\" WHERE \"spree_variants\".\"deleted_at\" IS NULL AND \"spree_variants\".\"sku\" = '17636'" 
    

    is_master_false: '1' 不要对创建的sql查询执行任何操作,而要查找其中的记录 is_master = false ?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Nimish Gupta    7 年前

    @Qwertie:对于搜索,您需要首先将所有要执行搜索的属性列为白名单。

    Variant model 只有

    所以你需要列入白名单

    为此,只需在spree/models中为variant创建一个名为variant\u decorator的decorator。rb和写入

    Spree::Variant.class_eval do
      ### WHITELISTED ATTRIBUTES ###
      self.whitelisted_ransackable_attributes |= ['is_master']
    end
    

    Spree::Variant.whitelisted_ransackable_attributes.push('is_master')

    现在重新启动服务器或rails控制台并进行尝试。