У меня есть область, которая возвращает Array
вместо ActiveRecord Relation
, когда она вызывается, но если я вызову методы в пределах области действия, она вернет ActiveRecord Relation
.Область действия ActiveRecord возвращает массив
scope :beta_user, -> {
joins(:config).where("config_type = 'Model' AND opts #>> '{beta}' = 'true'")
}
# Calling scope directly
Model.beta_user # => [Model1, Model2, Model3]
Model.beta_user.class # => Array
# Calling scope definition
Model.joins(:config).where("config_type = 'Model' AND opts #>> '{beta}' = 'true'")
=> [Model1, Model2, Model3]
Model.joins(:config).where("config_type = 'Model' AND opts #>> '{beta}' = 'true'").class
=> Model::ActiveRecord_Relation
Итак, мой вопрос здесь в том, что происходит с непоследовательными типами возврата? После этого я не могу связать другие области (я все еще могу их связать), и я не могу использовать другие методы AR Relation
, такие как #order
и #pluck
.
Из того, что я вижу на консоли, похоже, что вызов Model.beta_user.class
все еще выполняет запрос, тогда как Model.joins(:config).where("config_type = 'Model' AND opts #>> '{beta}' = 'true'")
не выполняет запрос. Я думал, что область не должна выполняться до тех пор, пока она не понадобится для оптимизации цепей/запросов.
вы можете проверить его с помощью метода класса вместо объема ...? – uzaif
Вы взглянули на этот ответ, чтобы узнать, является ли это той же причиной? http://stackoverflow.com/a/7901640/3366016 – user3366016