¿Cómo se agregan dos relaciones juntas? Cuando pruebo el operador +, devuelve una matriz. Pero necesito que devuelva una relación.agregando dos objetos ActiveRecord :: Relation
gracias, mike
¿Cómo se agregan dos relaciones juntas? Cuando pruebo el operador +, devuelve una matriz. Pero necesito que devuelva una relación.agregando dos objetos ActiveRecord :: Relation
gracias, mike
Probar:
new_relation = relation.merge(another_relation)
¿Qué pasa si una de las relaciones pasa a ser nula? – Matt
@Matt todavía funciona incluso si uno es nulo – kittyminky
@kittyminky si uno es nulo, el resultado se vuelve nulo. – Anwar
Si va a añadir objetos ActiveRecord :: relaciones para conseguir un resultado 'O' en lugar de 'Y' (se obtendría 'Y' comportamiento encadenando), y todavía se necesita que el resultado sea un ActiveRecord :: Relación de jugar bien con algún otro código (meta_search, por ejemplo) ....
def matching_one_or_two
temp = Model.matching_one + Model.matching_two
Model.where('id in (?)',temp.map(&:id))
end
Ciertamente no gre del mundo prueba un rendimiento, pero da como resultado un objeto ActiveRecord :: Relation que apunta a los resultados 'OR'.
También puede simplemente poner el "OR" directamente en el sql, en lugar de pedirle a Rails que lo genere, para darle a su aplicación de base de datos la posibilidad de obtener un mejor rendimiento. Un ejemplo:
Model.where ("table_name.col = 'uno' O table_name.col = 'dos'")
que también devolver un objeto ActiveRecord :: Relation.
Se pueden añadir dos ActiveRecord :: Relación con restricciones Arel
constraints_1 = Model.matching_one.arel.constraints
constraints_2 = Model.matching_two.arel.constraints
Model.where(constraints_1.and(constraints_2)).class => ActiveRecord::Relation
Puede usar u operador también
Model.where(constraints_1.or(constraints_2)).class => ActiveRecord::Relation
ejemplo real
constraints_1 = User.where(id: 1..5).arel.constraints
constraints_2 = User.where('id != 2').arel.constraints
User.where(constraints_1.and(constraints_2))
Usted puede ver excelente reparto pantalla sobre eso http://railscasts.com/episodes/355-hacking-with-arel
¿Podría corregir el paréntesis? Me duele la vista :-P – schmijos
¿Por qué no puedes crear ámbitos para obtener todo lo que necesitas? ¿Es algo complejo o simplemente no se puede hacer en este caso? Si es algo que puede hacer a nivel de la base de datos, no permita que llegue al nivel de la aplicación. –