métodos de asociación hacen, como los definidos por
has_many
ybelongs_to
utilizanActiveRecord::Relation
?¿Es posible conseguir el objeto ActiveRecord :: Relación de una asociaciónSi es así, ¿es posible obtener el objeto
ActiveRecord::Relation
que se está utilizando?
Todos somos conscientes de que Rails 3 es en gran medida utilizando ActiveRecord::Relation
objetos y Arel::Relation
objetos en el fondo, al crear consultas utilizando el Query Interface. Cuando utilizamos los métodos select
, joins
, etc. de la interfaz de consulta, se devuelve un objeto ActiveRecord::Relation
. Sin embargo, este no parece ser el caso cuando se llama a un método de asociación de un modelo. En cambio, la consulta se ejecuta inmediatamente y se devuelve una instancia, o una matriz de instancias, del modelo asociado.
considerar los siguientes modelos:
post.rb
class Post < ActiveRecord::Base
belongs_to :user
end
user.rb
class user < ActiveRecord::Base
has_many :posts
end
Ejemplo:
u = User.first
u.posts
Llamada u.posts
devuelve una matriz de publicaciones, no una instancia de ActiveRecord::Relation
. Me pregunto si es posible obtener el ActiveRecord::Relation
que es que está siendo utilizado por la asociación, si se está utilizando, tal vez mediante el uso de Arel::Table
?
Mi razonamiento para querer ActiveRecord::Relation
debe ser obvio: es porque quiero encadenar la asociación existente y manipular la consulta para un propósito diferente.
Love it. ¡Mucho más limpio! Te estoy dando el CHECKMARK. Y estoy de acuerdo con la documentación de Arel. He estado leyendo fragmentos y trozos de todo el lugar al respecto. Parece muy poderoso, pero sin una buena documentación, puede ser bastante molesto también. :) – John
Brillante, muchas gracias! –
¿hay alguna manera de llamar a '.scoped' en una matriz personalizada que hice? – brittohalloran