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_sth
which will need object ofAnother
class. So now tell me how that object will be evaluated because inside scopecalc_sth
will be treated as class method and self will be ClassThisTable
itself
– ray
Jan 8 at 5:07
You can imaginesome_field
as some tag which indicates other information. For example, it can beteenager
, which indicates age range, orweekday
, which indicates day range.calc_sth
andcalc_sth_else
will combine it with other criteriavar_in
to get a dynamic rangetmp1..tmp2
based onAnother
's data. Then I would like to filterlocal_field
on 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_sth
which will need object ofAnother
class. So now tell me how that object will be evaluated because inside scopecalc_sth
will be treated as class method and self will be ClassThisTable
itself
– ray
Jan 8 at 5:07
You can imaginesome_field
as some tag which indicates other information. For example, it can beteenager
, which indicates age range, orweekday
, which indicates day range.calc_sth
andcalc_sth_else
will combine it with other criteriavar_in
to get a dynamic rangetmp1..tmp2
based onAnother
's data. Then I would like to filterlocal_field
on 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_sth
which will need object ofAnother
class. So now tell me how that object will be evaluated because inside scopecalc_sth
will be treated as class method and self will be ClassThisTable
itself
– ray
Jan 8 at 5:07
You can imaginesome_field
as some tag which indicates other information. For example, it can beteenager
, which indicates age range, orweekday
, which indicates day range.calc_sth
andcalc_sth_else
will combine it with other criteriavar_in
to get a dynamic rangetmp1..tmp2
based onAnother
's data. Then I would like to filterlocal_field
on 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_sth
which will need object ofAnother
class. So now tell me how that object will be evaluated because inside scopecalc_sth
will be treated as class method and self will be ClassThisTable
itself
– ray
Jan 8 at 5:07
You can imaginesome_field
as some tag which indicates other information. For example, it can beteenager
, which indicates age range, orweekday
, which indicates day range.calc_sth
andcalc_sth_else
will combine it with other criteriavar_in
to get a dynamic rangetmp1..tmp2
based onAnother
's data. Then I would like to filterlocal_field
on 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_sth
which will need object ofAnother
class. So now tell me how that object will be evaluated because inside scopecalc_sth
will be treated as class method and self will be ClassThisTable
itself
– ray
Jan 8 at 5:07
You can imaginesome_field
as some tag which indicates other information. For example, it can beteenager
, which indicates age range, orweekday
, which indicates day range.calc_sth
andcalc_sth_else
will combine it with other criteriavar_in
to get a dynamic rangetmp1..tmp2
based onAnother
's data. Then I would like to filterlocal_field
on 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