Ruby on rails Ruby从实例变量中扣除其他变量中相同的值

Ruby on rails Ruby从实例变量中扣除其他变量中相同的值,ruby-on-rails,ruby,instance-variables,Ruby On Rails,Ruby,Instance Variables,我有两个实例值:@a和@b,它们是散列值,如。。。。 (将解释伪示例) 例如在@a中,我有: *Field1 | Field2 | Field3* CONTITECH | CT942K1 | 123 CONTITECH | CT722K1 | 123 ATE | AB2123 | 123 在@b中,我有: CONTITECH | CT942K1 | 456 BREMBO | TE132 | 123 如何做到@c=@a-@b只包含@b中没有的值 例如@c=@a-@b将包含: CONTITEC

我有两个实例值:@a和@b,它们是散列值,如。。。。 (将解释伪示例) 例如在@a中,我有:

*Field1 | Field2 | Field3*

CONTITECH | CT942K1 | 123
CONTITECH | CT722K1 | 123
ATE | AB2123 | 123
在@b中,我有:

CONTITECH | CT942K1 | 456
BREMBO | TE132 | 123
如何做到@c=@a-@b只包含@b中没有的值

例如@c=@a-@b将包含:

CONTITECH | CT722K1 | 123
ATE | AB2123 | 123
所以只有当两个字段相同时,我必须从@b中删除相同的值

如果不清楚的例子,写在评论。。。。我需要的是从@a中删除@b中相同的(field1和field2)条目。。。 如何做到这一点

如果这有帮助:代码: 这是@b(@articles):

和@a(@非原作者):

@非原创=[]
nr_-condition=“*”+零件编号至第gsub(/[^0-9A-Za-z]/,”).upcase+“*”
如果艺术长度>3
艺术=搜索\u非\u oem(艺术\u编号)
@search=CrossList.find(:all,:conditions=>['MATCH(cross\u value)对(?IN BOOLEAN MODE'),nr\u condition])
如果@search.present?
@prlist=PriceList.where(“id IN(?),@search.map(&:price\u list\u id))
如果@prlist.present?
@prlist.each do| p|
#@all_supp=供应商。全部
#如果@all_supp.find{| item | item.supp_BRAND.gsub(/[^0-9A-Za-z]/,'')。包括?(p.BRAND.gsub(/[^0-9A-Za-z]/,'')。upcase)&&art.present?
#记录器。警告(“!!!!!!!如果”)
#否则
@非原创试试这个:

@res = @non_original.reject do |obj|
  @articles.any? {|art| art.field1 == obj.field1 && art.field2 == obj.field2 }
end

除了那些
字段1
字段2
@文章
中的任何元素相匹配的对象之外,应该将
@非原始
中的所有对象放入
@res
中。
@res
中的对象的类型将与
@非原创的
相同-也就是说,
价格表

而不是伪代码,为什么不给出设置@a和@b的实际ruby代码以及b的结果呢?@Frederickhueng您将在那里看到什么?一切都在db中?此外,代码非常庞大,不会显示任何内容。
@非原创
似乎包含
价格表
对象,而
@articles
包含
文章
s。你想减法怎么用?@Chowlett我知道,这是个问题!从一个或另一个具有相同值的对象中删除@Chowlett仅当articles field1和field2值与非原始ffield1和ffield2相同时,从非原始对象中删除此行…是的,操作系统良好。。。。只是我还需要一些东西来编辑。。。但第一眼看上去不错
@non_original = []
    nr_condition = "*" + art_nr.to_s.gsub(/[^0-9A-Za-z]/, '').upcase + "*"
    if art_nr.length > 3
      art = search_not_oem(art_nr)
      @search = CrossList.find(:all, :conditions => ['MATCH (cross_value) AGAINST (? IN BOOLEAN MODE)', nr_condition])
      if @search.present?
        @prlist = PriceList.where("id IN (?)", @search.map(&:price_list_id))
        if  @prlist.present?
          @prlist.each do |p|
            #@all_supp = Supplier.all
            #if @all_supp.find{|item| item.SUP_BRAND.gsub(/[^0-9A-Za-z]/, '').include?(p.brand.gsub(/[^0-9A-Za-z]/, '').upcase)} && art.present?
            #  logger.warn("!!!!!! if")
            #else
              @non_original << p
            #end                  
          end
        end
      end
    end
@non_original
@res = @non_original.reject do |obj|
  @articles.any? {|art| art.field1 == obj.field1 && art.field2 == obj.field2 }
end