What's the difference between “left_joins” and “includes” in Rails 5?
In Rails 5, they have added the ActiveRecord query method left_joins
. What's the difference between left_joins
and includes
? I've always seen includes
as a left join.
ruby-on-rails activerecord ruby-on-rails-5
add a comment |
In Rails 5, they have added the ActiveRecord query method left_joins
. What's the difference between left_joins
and includes
? I've always seen includes
as a left join.
ruby-on-rails activerecord ruby-on-rails-5
add a comment |
In Rails 5, they have added the ActiveRecord query method left_joins
. What's the difference between left_joins
and includes
? I've always seen includes
as a left join.
ruby-on-rails activerecord ruby-on-rails-5
In Rails 5, they have added the ActiveRecord query method left_joins
. What's the difference between left_joins
and includes
? I've always seen includes
as a left join.
ruby-on-rails activerecord ruby-on-rails-5
ruby-on-rails activerecord ruby-on-rails-5
asked Nov 21 '18 at 15:00
daveomcddaveomcd
2,8971066106
2,8971066106
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
includes
by default loads the association data in 2 queries just like preload
.
But with additional references
call it switches from using two separate queries to creating a single LEFT OUTER JOIN
like left_joins
.
Refs:
Preload, Eagerload, Includes and Joins
Making sense of ActiveRecord joins, includes, preload, and eager_load
Includes will also defer to.eager_load
and load the records in one query if you apply a where clause.
– max
Nov 21 '18 at 16:19
@max But you cant use eager loaded tables viaincludes
inwhere
clause by default. You need to specify them inreferences
first
– Martin Zinovsky
Nov 21 '18 at 16:21
I''m not sure what you mean but you can doFoo.includes(:bars).where(bars: { baz: 'woo' })
. The result is the same as if you used eager_load.
– max
Nov 21 '18 at 16:23
@max yeah but if you change your example toFoo.includes(:bars).where("bars.baz = 'woo'")
it will throw an error. Check outconditions
part inincludes
docs
– Martin Zinovsky
Nov 21 '18 at 16:28
1
@max But I didnt know thathash
notation works withoutreferences
call so thank you
– Martin Zinovsky
Nov 21 '18 at 16:32
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53414830%2fwhats-the-difference-between-left-joins-and-includes-in-rails-5%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
includes
by default loads the association data in 2 queries just like preload
.
But with additional references
call it switches from using two separate queries to creating a single LEFT OUTER JOIN
like left_joins
.
Refs:
Preload, Eagerload, Includes and Joins
Making sense of ActiveRecord joins, includes, preload, and eager_load
Includes will also defer to.eager_load
and load the records in one query if you apply a where clause.
– max
Nov 21 '18 at 16:19
@max But you cant use eager loaded tables viaincludes
inwhere
clause by default. You need to specify them inreferences
first
– Martin Zinovsky
Nov 21 '18 at 16:21
I''m not sure what you mean but you can doFoo.includes(:bars).where(bars: { baz: 'woo' })
. The result is the same as if you used eager_load.
– max
Nov 21 '18 at 16:23
@max yeah but if you change your example toFoo.includes(:bars).where("bars.baz = 'woo'")
it will throw an error. Check outconditions
part inincludes
docs
– Martin Zinovsky
Nov 21 '18 at 16:28
1
@max But I didnt know thathash
notation works withoutreferences
call so thank you
– Martin Zinovsky
Nov 21 '18 at 16:32
add a comment |
includes
by default loads the association data in 2 queries just like preload
.
But with additional references
call it switches from using two separate queries to creating a single LEFT OUTER JOIN
like left_joins
.
Refs:
Preload, Eagerload, Includes and Joins
Making sense of ActiveRecord joins, includes, preload, and eager_load
Includes will also defer to.eager_load
and load the records in one query if you apply a where clause.
– max
Nov 21 '18 at 16:19
@max But you cant use eager loaded tables viaincludes
inwhere
clause by default. You need to specify them inreferences
first
– Martin Zinovsky
Nov 21 '18 at 16:21
I''m not sure what you mean but you can doFoo.includes(:bars).where(bars: { baz: 'woo' })
. The result is the same as if you used eager_load.
– max
Nov 21 '18 at 16:23
@max yeah but if you change your example toFoo.includes(:bars).where("bars.baz = 'woo'")
it will throw an error. Check outconditions
part inincludes
docs
– Martin Zinovsky
Nov 21 '18 at 16:28
1
@max But I didnt know thathash
notation works withoutreferences
call so thank you
– Martin Zinovsky
Nov 21 '18 at 16:32
add a comment |
includes
by default loads the association data in 2 queries just like preload
.
But with additional references
call it switches from using two separate queries to creating a single LEFT OUTER JOIN
like left_joins
.
Refs:
Preload, Eagerload, Includes and Joins
Making sense of ActiveRecord joins, includes, preload, and eager_load
includes
by default loads the association data in 2 queries just like preload
.
But with additional references
call it switches from using two separate queries to creating a single LEFT OUTER JOIN
like left_joins
.
Refs:
Preload, Eagerload, Includes and Joins
Making sense of ActiveRecord joins, includes, preload, and eager_load
answered Nov 21 '18 at 15:14
Martin ZinovskyMartin Zinovsky
1,5041816
1,5041816
Includes will also defer to.eager_load
and load the records in one query if you apply a where clause.
– max
Nov 21 '18 at 16:19
@max But you cant use eager loaded tables viaincludes
inwhere
clause by default. You need to specify them inreferences
first
– Martin Zinovsky
Nov 21 '18 at 16:21
I''m not sure what you mean but you can doFoo.includes(:bars).where(bars: { baz: 'woo' })
. The result is the same as if you used eager_load.
– max
Nov 21 '18 at 16:23
@max yeah but if you change your example toFoo.includes(:bars).where("bars.baz = 'woo'")
it will throw an error. Check outconditions
part inincludes
docs
– Martin Zinovsky
Nov 21 '18 at 16:28
1
@max But I didnt know thathash
notation works withoutreferences
call so thank you
– Martin Zinovsky
Nov 21 '18 at 16:32
add a comment |
Includes will also defer to.eager_load
and load the records in one query if you apply a where clause.
– max
Nov 21 '18 at 16:19
@max But you cant use eager loaded tables viaincludes
inwhere
clause by default. You need to specify them inreferences
first
– Martin Zinovsky
Nov 21 '18 at 16:21
I''m not sure what you mean but you can doFoo.includes(:bars).where(bars: { baz: 'woo' })
. The result is the same as if you used eager_load.
– max
Nov 21 '18 at 16:23
@max yeah but if you change your example toFoo.includes(:bars).where("bars.baz = 'woo'")
it will throw an error. Check outconditions
part inincludes
docs
– Martin Zinovsky
Nov 21 '18 at 16:28
1
@max But I didnt know thathash
notation works withoutreferences
call so thank you
– Martin Zinovsky
Nov 21 '18 at 16:32
Includes will also defer to
.eager_load
and load the records in one query if you apply a where clause.– max
Nov 21 '18 at 16:19
Includes will also defer to
.eager_load
and load the records in one query if you apply a where clause.– max
Nov 21 '18 at 16:19
@max But you cant use eager loaded tables via
includes
in where
clause by default. You need to specify them in references
first– Martin Zinovsky
Nov 21 '18 at 16:21
@max But you cant use eager loaded tables via
includes
in where
clause by default. You need to specify them in references
first– Martin Zinovsky
Nov 21 '18 at 16:21
I''m not sure what you mean but you can do
Foo.includes(:bars).where(bars: { baz: 'woo' })
. The result is the same as if you used eager_load.– max
Nov 21 '18 at 16:23
I''m not sure what you mean but you can do
Foo.includes(:bars).where(bars: { baz: 'woo' })
. The result is the same as if you used eager_load.– max
Nov 21 '18 at 16:23
@max yeah but if you change your example to
Foo.includes(:bars).where("bars.baz = 'woo'")
it will throw an error. Check out conditions
part in includes
docs– Martin Zinovsky
Nov 21 '18 at 16:28
@max yeah but if you change your example to
Foo.includes(:bars).where("bars.baz = 'woo'")
it will throw an error. Check out conditions
part in includes
docs– Martin Zinovsky
Nov 21 '18 at 16:28
1
1
@max But I didnt know that
hash
notation works without references
call so thank you– Martin Zinovsky
Nov 21 '18 at 16:32
@max But I didnt know that
hash
notation works without references
call so thank you– Martin Zinovsky
Nov 21 '18 at 16:32
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53414830%2fwhats-the-difference-between-left-joins-and-includes-in-rails-5%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown