Requêtes Arel, Joins et Rails

J'ai été bloqué sur un problème récemment, pour un peu de temps et a trouvé le chemin de mon Arel qui ressemble, il devrait me permettre de faire OU dans mes requêtes.

Comme un point de départ j'avais besoin pour convertir un Rails 3, la requête pour Arel et c'est là que j'ai couru dans des problèmes.

La suite de la portée et de la requête fonctionne comme je l'espère. Il me donne les demandes associées à un utilisateur en particulier des annonces.

#in the Request class
scope :responder, lambda { |user| joins(:ad).where(:ads => { :user_id => user }) }

Request.responder(303).to_sql

=> "SELECT \"requests\".* FROM \"requests\" INNER JOIN \"ads\" ON \"ads\".\"id\" = \"requests\".\"ad_id\" WHERE (\"ads\".\"user_id\" = 303)"

Selon doco sur le Arel github page et Railscast, 215, je devrais être capable de faire quelque chose comme ce qui suit à reproduire la requête avec Arel

  requests = Request.arel_table
  ads = Ad.arel_table
  where(requests.join(ads).on(ads[:id].eq(requests[:ad_id])))

Cela entraîne une erreur

TypeError: Cannot visit Arel::SelectManager

Je pouvez effectuer les opérations suivantes dans la console si

r = Request.arel_table
a = Ad.arel_table

r.join(a).to_sql
 => "SELECT  FROM \"requests\" INNER JOIN \"ads\" "

De sorte qu'il ressemble à former la requête SQL, mais quand vous mettez que dans un cas

Request.where(r.join(a)).to_sql

J'ai le

TypeError: Cannot visit Arel::SelectManager....

J'ai essayé de faire d'autres Arel actions dans le où et ça fonctionne (par exemple)

Request.where(r[:status].eq(nil)).to_sql
 => "SELECT \"requests\".* FROM \"requests\" WHERE (\"requests\".\"status\" IS NULL)"

C'est un peu au-delà de mon enfance rails/ruby connaissances. Des idées?

Merci d'avance.

source d'informationauteur Jason