How do I run a ruby function inside an ActiveRecord query?












0















City.all.sample{rand(1..3)} I want the random function to generate the sample count. This always returns one record.










share|improve this question























  • @iGian couple of hundred times. Less than a thousand.

    – tambakoo
    Nov 19 '18 at 10:24






  • 1





    [1, 2, 3, 4, 5, 6, 7].sample(rand(1..3))

    – iGian
    Nov 19 '18 at 10:30











  • @iGian that was super simple! Thanks.

    – tambakoo
    Nov 19 '18 at 10:34











  • sample is not an active record query, though.

    – Sergio Tulentsev
    Nov 19 '18 at 10:38






  • 1





    @tambakoo: that it is, but you are not passing your logic to it. It runs unaltered. And then sample acts on the results. And in general, you can't "pass a ruby function to be used in a query". That's the whole point of the databases: to filter/sort/return data with maximum efficiency.

    – Sergio Tulentsev
    Nov 19 '18 at 11:15


















0















City.all.sample{rand(1..3)} I want the random function to generate the sample count. This always returns one record.










share|improve this question























  • @iGian couple of hundred times. Less than a thousand.

    – tambakoo
    Nov 19 '18 at 10:24






  • 1





    [1, 2, 3, 4, 5, 6, 7].sample(rand(1..3))

    – iGian
    Nov 19 '18 at 10:30











  • @iGian that was super simple! Thanks.

    – tambakoo
    Nov 19 '18 at 10:34











  • sample is not an active record query, though.

    – Sergio Tulentsev
    Nov 19 '18 at 10:38






  • 1





    @tambakoo: that it is, but you are not passing your logic to it. It runs unaltered. And then sample acts on the results. And in general, you can't "pass a ruby function to be used in a query". That's the whole point of the databases: to filter/sort/return data with maximum efficiency.

    – Sergio Tulentsev
    Nov 19 '18 at 11:15
















0












0








0








City.all.sample{rand(1..3)} I want the random function to generate the sample count. This always returns one record.










share|improve this question














City.all.sample{rand(1..3)} I want the random function to generate the sample count. This always returns one record.







ruby activerecord ruby-on-rails-5






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 19 '18 at 9:46









tambakootambakoo

5510




5510













  • @iGian couple of hundred times. Less than a thousand.

    – tambakoo
    Nov 19 '18 at 10:24






  • 1





    [1, 2, 3, 4, 5, 6, 7].sample(rand(1..3))

    – iGian
    Nov 19 '18 at 10:30











  • @iGian that was super simple! Thanks.

    – tambakoo
    Nov 19 '18 at 10:34











  • sample is not an active record query, though.

    – Sergio Tulentsev
    Nov 19 '18 at 10:38






  • 1





    @tambakoo: that it is, but you are not passing your logic to it. It runs unaltered. And then sample acts on the results. And in general, you can't "pass a ruby function to be used in a query". That's the whole point of the databases: to filter/sort/return data with maximum efficiency.

    – Sergio Tulentsev
    Nov 19 '18 at 11:15





















  • @iGian couple of hundred times. Less than a thousand.

    – tambakoo
    Nov 19 '18 at 10:24






  • 1





    [1, 2, 3, 4, 5, 6, 7].sample(rand(1..3))

    – iGian
    Nov 19 '18 at 10:30











  • @iGian that was super simple! Thanks.

    – tambakoo
    Nov 19 '18 at 10:34











  • sample is not an active record query, though.

    – Sergio Tulentsev
    Nov 19 '18 at 10:38






  • 1





    @tambakoo: that it is, but you are not passing your logic to it. It runs unaltered. And then sample acts on the results. And in general, you can't "pass a ruby function to be used in a query". That's the whole point of the databases: to filter/sort/return data with maximum efficiency.

    – Sergio Tulentsev
    Nov 19 '18 at 11:15



















@iGian couple of hundred times. Less than a thousand.

– tambakoo
Nov 19 '18 at 10:24





@iGian couple of hundred times. Less than a thousand.

– tambakoo
Nov 19 '18 at 10:24




1




1





[1, 2, 3, 4, 5, 6, 7].sample(rand(1..3))

– iGian
Nov 19 '18 at 10:30





[1, 2, 3, 4, 5, 6, 7].sample(rand(1..3))

– iGian
Nov 19 '18 at 10:30













@iGian that was super simple! Thanks.

– tambakoo
Nov 19 '18 at 10:34





@iGian that was super simple! Thanks.

– tambakoo
Nov 19 '18 at 10:34













sample is not an active record query, though.

– Sergio Tulentsev
Nov 19 '18 at 10:38





sample is not an active record query, though.

– Sergio Tulentsev
Nov 19 '18 at 10:38




1




1





@tambakoo: that it is, but you are not passing your logic to it. It runs unaltered. And then sample acts on the results. And in general, you can't "pass a ruby function to be used in a query". That's the whole point of the databases: to filter/sort/return data with maximum efficiency.

– Sergio Tulentsev
Nov 19 '18 at 11:15







@tambakoo: that it is, but you are not passing your logic to it. It runs unaltered. And then sample acts on the results. And in general, you can't "pass a ruby function to be used in a query". That's the whole point of the databases: to filter/sort/return data with maximum efficiency.

– Sergio Tulentsev
Nov 19 '18 at 11:15














1 Answer
1






active

oldest

votes


















0














I'd suggest this way, to avoid retrieving all records:



n.times.map.with_object() { |_, a| a << City.find(City.ids.sample) }


It returns an array of records.



Of course, n can be a random integer.






share|improve this answer
























  • Why not City.order('RAND()').limit(rand(1..3))? (RAND(), RANDOM()) depending the DB.

    – Sebastian Palma
    Nov 19 '18 at 10:38











  • @SebastianPalma: terrible performance for larger tables.

    – Sergio Tulentsev
    Nov 19 '18 at 10:38











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
});


}
});














draft saved

draft discarded


















StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53371941%2fhow-do-i-run-a-ruby-function-inside-an-activerecord-query%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









0














I'd suggest this way, to avoid retrieving all records:



n.times.map.with_object() { |_, a| a << City.find(City.ids.sample) }


It returns an array of records.



Of course, n can be a random integer.






share|improve this answer
























  • Why not City.order('RAND()').limit(rand(1..3))? (RAND(), RANDOM()) depending the DB.

    – Sebastian Palma
    Nov 19 '18 at 10:38











  • @SebastianPalma: terrible performance for larger tables.

    – Sergio Tulentsev
    Nov 19 '18 at 10:38
















0














I'd suggest this way, to avoid retrieving all records:



n.times.map.with_object() { |_, a| a << City.find(City.ids.sample) }


It returns an array of records.



Of course, n can be a random integer.






share|improve this answer
























  • Why not City.order('RAND()').limit(rand(1..3))? (RAND(), RANDOM()) depending the DB.

    – Sebastian Palma
    Nov 19 '18 at 10:38











  • @SebastianPalma: terrible performance for larger tables.

    – Sergio Tulentsev
    Nov 19 '18 at 10:38














0












0








0







I'd suggest this way, to avoid retrieving all records:



n.times.map.with_object() { |_, a| a << City.find(City.ids.sample) }


It returns an array of records.



Of course, n can be a random integer.






share|improve this answer













I'd suggest this way, to avoid retrieving all records:



n.times.map.with_object() { |_, a| a << City.find(City.ids.sample) }


It returns an array of records.



Of course, n can be a random integer.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 19 '18 at 10:36









iGianiGian

3,6052622




3,6052622













  • Why not City.order('RAND()').limit(rand(1..3))? (RAND(), RANDOM()) depending the DB.

    – Sebastian Palma
    Nov 19 '18 at 10:38











  • @SebastianPalma: terrible performance for larger tables.

    – Sergio Tulentsev
    Nov 19 '18 at 10:38



















  • Why not City.order('RAND()').limit(rand(1..3))? (RAND(), RANDOM()) depending the DB.

    – Sebastian Palma
    Nov 19 '18 at 10:38











  • @SebastianPalma: terrible performance for larger tables.

    – Sergio Tulentsev
    Nov 19 '18 at 10:38

















Why not City.order('RAND()').limit(rand(1..3))? (RAND(), RANDOM()) depending the DB.

– Sebastian Palma
Nov 19 '18 at 10:38





Why not City.order('RAND()').limit(rand(1..3))? (RAND(), RANDOM()) depending the DB.

– Sebastian Palma
Nov 19 '18 at 10:38













@SebastianPalma: terrible performance for larger tables.

– Sergio Tulentsev
Nov 19 '18 at 10:38





@SebastianPalma: terrible performance for larger tables.

– Sergio Tulentsev
Nov 19 '18 at 10:38


















draft saved

draft discarded




















































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.




draft saved


draft discarded














StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53371941%2fhow-do-i-run-a-ruby-function-inside-an-activerecord-query%23new-answer', 'question_page');
}
);

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







Popular posts from this blog

Biblatex bibliography style without URLs when DOI exists (in Overleaf with Zotero bibliography)

How to change which sound is reproduced for terminal bell?

Can I use Tabulator js library in my java Spring + Thymeleaf project?