Using field of association for calculation in scope
Another has field some_field.
ThisTable belongs_to Another and has field local_field.
Now I would like to write scope some_filter for ThisTable:
scope :some_filter, ->(var_in) {
tmp1 = calc_sth(another.some_field, var_in)
tmp2 = calc_sth_else(another.some_field, var_in)
where(local_field: tmp1..tmp2)
}
I got error undefined local variable or method 'another' for #<ActiveRecord::AssociationRelation >
How to write this?
ruby-on-rails
add a comment |
Another has field some_field.
ThisTable belongs_to Another and has field local_field.
Now I would like to write scope some_filter for ThisTable:
scope :some_filter, ->(var_in) {
tmp1 = calc_sth(another.some_field, var_in)
tmp2 = calc_sth_else(another.some_field, var_in)
where(local_field: tmp1..tmp2)
}
I got error undefined local variable or method 'another' for #<ActiveRecord::AssociationRelation >
How to write this?
ruby-on-rails
add a comment |
Another has field some_field.
ThisTable belongs_to Another and has field local_field.
Now I would like to write scope some_filter for ThisTable:
scope :some_filter, ->(var_in) {
tmp1 = calc_sth(another.some_field, var_in)
tmp2 = calc_sth_else(another.some_field, var_in)
where(local_field: tmp1..tmp2)
}
I got error undefined local variable or method 'another' for #<ActiveRecord::AssociationRelation >
How to write this?
ruby-on-rails
Another has field some_field.
ThisTable belongs_to Another and has field local_field.
Now I would like to write scope some_filter for ThisTable:
scope :some_filter, ->(var_in) {
tmp1 = calc_sth(another.some_field, var_in)
tmp2 = calc_sth_else(another.some_field, var_in)
where(local_field: tmp1..tmp2)
}
I got error undefined local variable or method 'another' for #<ActiveRecord::AssociationRelation >
How to write this?
ruby-on-rails
ruby-on-rails
edited Jan 3 at 7:25
Mike
asked Jan 3 at 7:06
MikeMike
52
52
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
Scopes are not executed on an instance of the object, they are basically class methods. By using another in your scope you don't really indicate for which ThisTable you want to get Another for. It's as if you called ThisTable.another - it won't work.
add a comment |
scope is nothing but to define class methods. So self considered inside scope is always ThisTable Class object i.e. ActiveRecord Relation object.
Here you called another (association method for ThisTable class object) inside scope on self which is class ThisTable itself.
Thanks for the clarification. And in my case, how can I resolve it to achieve what I need?
– Mike
Jan 8 at 3:12
You will call your scope asThisTable.some_filter(var_in)but inside scope it is calling methodcalc_sthwhich will need object ofAnotherclass. So now tell me how that object will be evaluated because inside scopecalc_sthwill be treated as class method and self will be ClassThisTableitself
– ray
Jan 8 at 5:07
You can imaginesome_fieldas some tag which indicates other information. For example, it can beteenager, which indicates age range, orweekday, which indicates day range.calc_sthandcalc_sth_elsewill combine it with other criteriavar_into get a dynamic rangetmp1..tmp2based onAnother's data. Then I would like to filterlocal_fieldon these dynamic ranges.
– Mike
Jan 8 at 7:06
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%2f54017770%2fusing-field-of-association-for-calculation-in-scope%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Scopes are not executed on an instance of the object, they are basically class methods. By using another in your scope you don't really indicate for which ThisTable you want to get Another for. It's as if you called ThisTable.another - it won't work.
add a comment |
Scopes are not executed on an instance of the object, they are basically class methods. By using another in your scope you don't really indicate for which ThisTable you want to get Another for. It's as if you called ThisTable.another - it won't work.
add a comment |
Scopes are not executed on an instance of the object, they are basically class methods. By using another in your scope you don't really indicate for which ThisTable you want to get Another for. It's as if you called ThisTable.another - it won't work.
Scopes are not executed on an instance of the object, they are basically class methods. By using another in your scope you don't really indicate for which ThisTable you want to get Another for. It's as if you called ThisTable.another - it won't work.
answered Jan 3 at 7:34
sloneorzeszkisloneorzeszki
164111
164111
add a comment |
add a comment |
scope is nothing but to define class methods. So self considered inside scope is always ThisTable Class object i.e. ActiveRecord Relation object.
Here you called another (association method for ThisTable class object) inside scope on self which is class ThisTable itself.
Thanks for the clarification. And in my case, how can I resolve it to achieve what I need?
– Mike
Jan 8 at 3:12
You will call your scope asThisTable.some_filter(var_in)but inside scope it is calling methodcalc_sthwhich will need object ofAnotherclass. So now tell me how that object will be evaluated because inside scopecalc_sthwill be treated as class method and self will be ClassThisTableitself
– ray
Jan 8 at 5:07
You can imaginesome_fieldas some tag which indicates other information. For example, it can beteenager, which indicates age range, orweekday, which indicates day range.calc_sthandcalc_sth_elsewill combine it with other criteriavar_into get a dynamic rangetmp1..tmp2based onAnother's data. Then I would like to filterlocal_fieldon these dynamic ranges.
– Mike
Jan 8 at 7:06
add a comment |
scope is nothing but to define class methods. So self considered inside scope is always ThisTable Class object i.e. ActiveRecord Relation object.
Here you called another (association method for ThisTable class object) inside scope on self which is class ThisTable itself.
Thanks for the clarification. And in my case, how can I resolve it to achieve what I need?
– Mike
Jan 8 at 3:12
You will call your scope asThisTable.some_filter(var_in)but inside scope it is calling methodcalc_sthwhich will need object ofAnotherclass. So now tell me how that object will be evaluated because inside scopecalc_sthwill be treated as class method and self will be ClassThisTableitself
– ray
Jan 8 at 5:07
You can imaginesome_fieldas some tag which indicates other information. For example, it can beteenager, which indicates age range, orweekday, which indicates day range.calc_sthandcalc_sth_elsewill combine it with other criteriavar_into get a dynamic rangetmp1..tmp2based onAnother's data. Then I would like to filterlocal_fieldon these dynamic ranges.
– Mike
Jan 8 at 7:06
add a comment |
scope is nothing but to define class methods. So self considered inside scope is always ThisTable Class object i.e. ActiveRecord Relation object.
Here you called another (association method for ThisTable class object) inside scope on self which is class ThisTable itself.
scope is nothing but to define class methods. So self considered inside scope is always ThisTable Class object i.e. ActiveRecord Relation object.
Here you called another (association method for ThisTable class object) inside scope on self which is class ThisTable itself.
answered Jan 3 at 7:35
rayray
3,3561829
3,3561829
Thanks for the clarification. And in my case, how can I resolve it to achieve what I need?
– Mike
Jan 8 at 3:12
You will call your scope asThisTable.some_filter(var_in)but inside scope it is calling methodcalc_sthwhich will need object ofAnotherclass. So now tell me how that object will be evaluated because inside scopecalc_sthwill be treated as class method and self will be ClassThisTableitself
– ray
Jan 8 at 5:07
You can imaginesome_fieldas some tag which indicates other information. For example, it can beteenager, which indicates age range, orweekday, which indicates day range.calc_sthandcalc_sth_elsewill combine it with other criteriavar_into get a dynamic rangetmp1..tmp2based onAnother's data. Then I would like to filterlocal_fieldon these dynamic ranges.
– Mike
Jan 8 at 7:06
add a comment |
Thanks for the clarification. And in my case, how can I resolve it to achieve what I need?
– Mike
Jan 8 at 3:12
You will call your scope asThisTable.some_filter(var_in)but inside scope it is calling methodcalc_sthwhich will need object ofAnotherclass. So now tell me how that object will be evaluated because inside scopecalc_sthwill be treated as class method and self will be ClassThisTableitself
– ray
Jan 8 at 5:07
You can imaginesome_fieldas some tag which indicates other information. For example, it can beteenager, which indicates age range, orweekday, which indicates day range.calc_sthandcalc_sth_elsewill combine it with other criteriavar_into get a dynamic rangetmp1..tmp2based onAnother's data. Then I would like to filterlocal_fieldon these dynamic ranges.
– Mike
Jan 8 at 7:06
Thanks for the clarification. And in my case, how can I resolve it to achieve what I need?
– Mike
Jan 8 at 3:12
Thanks for the clarification. And in my case, how can I resolve it to achieve what I need?
– Mike
Jan 8 at 3:12
You will call your scope as
ThisTable.some_filter(var_in) but inside scope it is calling method calc_sth which will need object of Another class. So now tell me how that object will be evaluated because inside scope calc_sth will be treated as class method and self will be Class ThisTable itself– ray
Jan 8 at 5:07
You will call your scope as
ThisTable.some_filter(var_in) but inside scope it is calling method calc_sth which will need object of Another class. So now tell me how that object will be evaluated because inside scope calc_sth will be treated as class method and self will be Class ThisTable itself– ray
Jan 8 at 5:07
You can imagine
some_field as some tag which indicates other information. For example, it can be teenager, which indicates age range, or weekday, which indicates day range. calc_sth and calc_sth_else will combine it with other criteria var_in to get a dynamic range tmp1..tmp2 based on Another's data. Then I would like to filter local_field on these dynamic ranges.– Mike
Jan 8 at 7:06
You can imagine
some_field as some tag which indicates other information. For example, it can be teenager, which indicates age range, or weekday, which indicates day range. calc_sth and calc_sth_else will combine it with other criteria var_in to get a dynamic range tmp1..tmp2 based on Another's data. Then I would like to filter local_field on these dynamic ranges.– Mike
Jan 8 at 7:06
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%2f54017770%2fusing-field-of-association-for-calculation-in-scope%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