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_loadand 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 viaincludesinwhereclause by default. You need to specify them inreferencesfirst
– 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 outconditionspart inincludesdocs
– Martin Zinovsky
Nov 21 '18 at 16:28
1
@max But I didnt know thathashnotation works withoutreferencescall 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_loadand 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 viaincludesinwhereclause by default. You need to specify them inreferencesfirst
– 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 outconditionspart inincludesdocs
– Martin Zinovsky
Nov 21 '18 at 16:28
1
@max But I didnt know thathashnotation works withoutreferencescall 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_loadand 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 viaincludesinwhereclause by default. You need to specify them inreferencesfirst
– 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 outconditionspart inincludesdocs
– Martin Zinovsky
Nov 21 '18 at 16:28
1
@max But I didnt know thathashnotation works withoutreferencescall 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_loadand 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 viaincludesinwhereclause by default. You need to specify them inreferencesfirst
– 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 outconditionspart inincludesdocs
– Martin Zinovsky
Nov 21 '18 at 16:28
1
@max But I didnt know thathashnotation works withoutreferencescall so thank you
– Martin Zinovsky
Nov 21 '18 at 16:32
add a comment |
Includes will also defer to.eager_loadand 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 viaincludesinwhereclause by default. You need to specify them inreferencesfirst
– 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 outconditionspart inincludesdocs
– Martin Zinovsky
Nov 21 '18 at 16:28
1
@max But I didnt know thathashnotation works withoutreferencescall 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