9
votes

Ajout de deux objets d'activerecord :: relativement

Comment ajoutez-vous deux relations ensemble? Lorsque j'essaie l'opérateur +, il renvoie un tableau. Mais j'en ai besoin pour renvoyer une relation.

merci, Mike


1 commentaires

Pourquoi ne pouvez-vous pas faire des étendues pour obtenir tout ce dont vous avez besoin? Est-ce quelque chose de complexe ou vous ne pouvez tout simplement pas faire dans ce cas? Si vous pouvez faire quelque chose au niveau de la base de données, ne laissez pas le niveau d'application.


3 Réponses :


8
votes

Essayez:

new_relation = relation.merge(another_relation)


4 commentaires

Et si l'une des relations entre être nulle?


@Matt fonctionne toujours même si on est nul


@kittyminky Si l'on est nul, le résultat devient nul.


Quelqu'un découvre jamais comment gérer un cas nul? Je ne veux pas que les deux relations deviennent nulle si l'une est.



2
votes

Si vous ajoutez ActiveRecord :: Objets de relation pour obtenir un "résultat" plutôt que "et" (vous obtiendriez "et" comportement en chaînant), et vous avez toujours besoin du résultat pour être une relation ActiveRecord :: Relation Pour jouer sympa avec un autre code (méta_search, par exemple) ....

def matching_one_or_two
  temp = Model.matching_one + Model.matching_two
  Model.where('id in (?)',temp.map(&:id))
end


0 commentaires

3
votes

Vous pouvez ajouter deux liens activeCord :: relation avec arel contraintes xxx pré>

Vous pouvez utiliser ou opérateur trop p> xxx pré>

exemple réel P>

constraints_1 = User.where(id: 1..5).arel.constraints
constraints_2 = User.where('id != 2').arel.constraints

User.where(constraints_1.and(constraints_2))


1 commentaires

Pourriez-vous s'il vous plaît corriger la parenthèse? Ça fait mal mes yeux :-p