Comment exprimer un PAS DANS la requête avec ActiveRecord/Rails?

Juste de mettre à jour cette car il semble que beaucoup de gens viennent à ce, si vous êtes à l'aide de Rails de 4 à examiner les réponses par Lê Trung " et VinniVidiVicci.

Topic.where.not(forum_id:@forums.map(&:id))

Topic.where(published:true).where.not(forum_id:@forums.map(&:id))

Je l'espère, il y a une solution simple qui n'implique pas de find_by_sql, si non, alors je suppose que vous avez à travailler.

J'ai trouvé cet article qui référence ce:

Topic.find(:all, :conditions => { :forum_id => @forums.map(&:id) })

qui est le même que

SELECT * FROM topics WHERE forum_id IN (<@forum ids>)

Je me demandais si il existe un moyen de faire NOT IN avec que, comme:

SELECT * FROM topics WHERE forum_id NOT IN (<@forum ids>)
  • Comme pour info, Datamapper a eu un soutien spécifique pour les PAS DANS. Exemple: Person.all(:name.not => ['bob','rick','steve'])
  • désolé d'être ignorant, mais qu'est-ce que Datamapper? est la partie de rails 3?
  • mapper des données est une autre façon de stocker des données, il remplace Active Record avec une structure différente, et ensuite, vous écrivez votre modèle des choses telles que des requêtes, différemment.
InformationsquelleAutor Toby Joiner | 2010-11-29