Why does this codeblock execute after Rails.cache.fetch
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I have this line of code which performs exactly what I want it to do. But I have no idea why it works.
Rails.cache.fetch(key, expires_in: 1.day) do
a << b
end
What it is supposed to do is add b to a if the key does not exist in the Rails cache.
Why i'm confused?
Rails.cache.fetch(key, expires_in: 1.day)
returns nil, regardless if the key was already in the cache.
question:
why does the code block run when there is no key in the cache, but doesn't run otherwise?
Extra details: Rails cache is connected to Redis.
ruby-on-rails ruby redis codeblocks
add a comment |
I have this line of code which performs exactly what I want it to do. But I have no idea why it works.
Rails.cache.fetch(key, expires_in: 1.day) do
a << b
end
What it is supposed to do is add b to a if the key does not exist in the Rails cache.
Why i'm confused?
Rails.cache.fetch(key, expires_in: 1.day)
returns nil, regardless if the key was already in the cache.
question:
why does the code block run when there is no key in the cache, but doesn't run otherwise?
Extra details: Rails cache is connected to Redis.
ruby-on-rails ruby redis codeblocks
add a comment |
I have this line of code which performs exactly what I want it to do. But I have no idea why it works.
Rails.cache.fetch(key, expires_in: 1.day) do
a << b
end
What it is supposed to do is add b to a if the key does not exist in the Rails cache.
Why i'm confused?
Rails.cache.fetch(key, expires_in: 1.day)
returns nil, regardless if the key was already in the cache.
question:
why does the code block run when there is no key in the cache, but doesn't run otherwise?
Extra details: Rails cache is connected to Redis.
ruby-on-rails ruby redis codeblocks
I have this line of code which performs exactly what I want it to do. But I have no idea why it works.
Rails.cache.fetch(key, expires_in: 1.day) do
a << b
end
What it is supposed to do is add b to a if the key does not exist in the Rails cache.
Why i'm confused?
Rails.cache.fetch(key, expires_in: 1.day)
returns nil, regardless if the key was already in the cache.
question:
why does the code block run when there is no key in the cache, but doesn't run otherwise?
Extra details: Rails cache is connected to Redis.
ruby-on-rails ruby redis codeblocks
ruby-on-rails ruby redis codeblocks
asked Nov 16 '18 at 14:37
MakotoMakoto
51
51
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
It might be confusing that the do ... end
block is evaluated although Rails.cache.fetch
returns nil
. But the do ... end
block doesn't run on top of the nil
response.
In fact, the do ... end
block is an additional argument to the fetch
method call. Have a look at the source code of fetch
.
Without a block fetch
basically does only one thing – calling read(name, options)
in line 328. But with a block it way more (lines 307 to 324)
fabulous thanks. This also led me to a solution to my spec problems. 'allow(Rails.cache).to receive(:fetch).and_yield' solved them
– Makoto
Nov 16 '18 at 14:56
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%2f53339923%2fwhy-does-this-codeblock-execute-after-rails-cache-fetch%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
It might be confusing that the do ... end
block is evaluated although Rails.cache.fetch
returns nil
. But the do ... end
block doesn't run on top of the nil
response.
In fact, the do ... end
block is an additional argument to the fetch
method call. Have a look at the source code of fetch
.
Without a block fetch
basically does only one thing – calling read(name, options)
in line 328. But with a block it way more (lines 307 to 324)
fabulous thanks. This also led me to a solution to my spec problems. 'allow(Rails.cache).to receive(:fetch).and_yield' solved them
– Makoto
Nov 16 '18 at 14:56
add a comment |
It might be confusing that the do ... end
block is evaluated although Rails.cache.fetch
returns nil
. But the do ... end
block doesn't run on top of the nil
response.
In fact, the do ... end
block is an additional argument to the fetch
method call. Have a look at the source code of fetch
.
Without a block fetch
basically does only one thing – calling read(name, options)
in line 328. But with a block it way more (lines 307 to 324)
fabulous thanks. This also led me to a solution to my spec problems. 'allow(Rails.cache).to receive(:fetch).and_yield' solved them
– Makoto
Nov 16 '18 at 14:56
add a comment |
It might be confusing that the do ... end
block is evaluated although Rails.cache.fetch
returns nil
. But the do ... end
block doesn't run on top of the nil
response.
In fact, the do ... end
block is an additional argument to the fetch
method call. Have a look at the source code of fetch
.
Without a block fetch
basically does only one thing – calling read(name, options)
in line 328. But with a block it way more (lines 307 to 324)
It might be confusing that the do ... end
block is evaluated although Rails.cache.fetch
returns nil
. But the do ... end
block doesn't run on top of the nil
response.
In fact, the do ... end
block is an additional argument to the fetch
method call. Have a look at the source code of fetch
.
Without a block fetch
basically does only one thing – calling read(name, options)
in line 328. But with a block it way more (lines 307 to 324)
answered Nov 16 '18 at 14:50
spickermannspickermann
61.5k75881
61.5k75881
fabulous thanks. This also led me to a solution to my spec problems. 'allow(Rails.cache).to receive(:fetch).and_yield' solved them
– Makoto
Nov 16 '18 at 14:56
add a comment |
fabulous thanks. This also led me to a solution to my spec problems. 'allow(Rails.cache).to receive(:fetch).and_yield' solved them
– Makoto
Nov 16 '18 at 14:56
fabulous thanks. This also led me to a solution to my spec problems. 'allow(Rails.cache).to receive(:fetch).and_yield' solved them
– Makoto
Nov 16 '18 at 14:56
fabulous thanks. This also led me to a solution to my spec problems. 'allow(Rails.cache).to receive(:fetch).and_yield' solved them
– Makoto
Nov 16 '18 at 14:56
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%2f53339923%2fwhy-does-this-codeblock-execute-after-rails-cache-fetch%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