Skip to content

Instantly share code, notes, and snippets.

@chollier
Created September 24, 2010 15:10
Show Gist options
  • Save chollier/595525 to your computer and use it in GitHub Desktop.
Save chollier/595525 to your computer and use it in GitHub Desktop.
def subproduct?
!self.parent.blank?
end
def self.not_sub
returning [] do |value|
Product.each do |x|
if !x.subproduct?
value << x
end
end
end
end
@nicolasblanco
Copy link

1er commentaire : pourquoi !..blank? alors que rails à la méthode present? qui justement faire !blank? automatiquement ?

@nicolasblanco
Copy link

2ème commentaire : returning est deprecated. Il faut utiliser la méthode tap désormais.
Donc a la place de returning([]) do..., utilise [].tap do...

@nicolasblanco
Copy link

3eme : Vu que tu construit un Array a partir d'un autre, inject peut etre utilisé. Ex :

def self.not_sub
  Product.each.inject([]) { |value, product| value << x if !product.subproduct?; value; }
end

4eme : sinon effectivement ces commentaires sont pur ruby, y a moyen de faire en SQL.

@chollier
Copy link
Author

En SQL c'est mieux en effet :

scope :not_sub, lambda {
joins("left join product_joins on products.id = product_joins.sub_product_id").where('product_joins.product_id' => nil)
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment