Hallo.
I have a user and a skill table joined in a SkillUser table. (has many
through)
Now I try to get all Skills listed which are not already in the join
table
for user 1
In other words: user 1 has entries in the SkillUser table for skill 1
and
2. And I want to get skill 3...to ....in the result, but not 1 or 2.
I have tried:
skills = Skill.sort.includes(:skill_users).where('skill_users.user_id
NOT
IN (?)', @user.id)
But then I only get all the skills listed for all other users already
listed in the SkillUser table.
Somehow I thing about a filter like
skill = Skill.sort
skill.filter(substract skills for user x which are already in SkillUser)
Any idea? Thanks for help..
on 2012-09-21 11:49
on 2012-09-21 17:41
On Fri, Sep 21, 2012 at 2:48 AM, Werner <webagentur.laude@googlemail.com> wrote: > I have a user and a skill table joined in a SkillUser table. (has many > through) > Now I try to get all Skills listed which are not already in the join table > for user 1 Stop thinking in terms of tables and think about your models, e.g. skills_you_want_to_display = Skill.all - user.skills -- Hassan Schroeder ------------------------ hassan.schroeder@gmail.com http://about.me/hassanschroeder twitter: @hassan
on 2012-09-21 17:47
Am 21.09.2012 um 17:40 schrieb Hassan Schroeder <hassan.schroeder@gmail.com>: > On Fri, Sep 21, 2012 at 2:48 AM, Werner <webagentur.laude@googlemail.com> wrote: Hi Hassan.. > >> I have a user and a skill table joined in a SkillUser table. (has many >> through) >> Now I try to get all Skills listed which are not already in the join table >> for user 1 > > Stop thinking in terms of tables and think about your models, e.g. > > skills_you_want_to_display = Skill.all - user.skills can you give me a practical sample..thanks > For more options, visit https://groups.google.com/groups/opt_out. > > Werner Laude webagentur.laude@gmail.com
on 2012-09-21 17:49
On Fri, Sep 21, 2012 at 8:46 AM, Werner Laude <webagentur.laude@googlemail.com> wrote: > can you give me a practical sample..thanks I just did :-) -- Hassan Schroeder ------------------------ hassan.schroeder@gmail.com http://about.me/hassanschroeder twitter: @hassan
on 2012-09-21 17:55
Am 21.09.2012 um 17:47 schrieb Hassan Schroeder <hassan.schroeder@gmail.com>: > On Fri, Sep 21, 2012 at 8:46 AM, Werner Laude > <webagentur.laude@googlemail.com> wrote: > >> can you give me a practical sample..thanks > > I just did :-) This idea Skill.all - user.skills is totally new to me.. I will try tonight..ned some air now Thanks so far > For more options, visit https://groups.google.com/groups/opt_out. > > Werner Laude webagentur.laude@gmail.com
on 2012-09-21 17:59
On Fri, Sep 21, 2012 at 8:54 AM, Werner Laude <webagentur.laude@googlemail.com> wrote: > This idea > > Skill.all - user.skills > > is totally new to me.. Time to open up irb or a rails console and play around, e.g. 1.9.3p194 :014 > [1,2,3,4,5] - [1,2,3] => [4, 5] Have fun! -- Hassan Schroeder ------------------------ hassan.schroeder@gmail.com http://about.me/hassanschroeder twitter: @hassan
on 2012-09-21 18:18
I won't generally go with that approach: - Skill.all can get big - You're doing 2 queries by default plus the array subtraction It's better to just use a scope or a class method on Skill or some service class in my opinion but for brevity nothing tops that. The results would (should) be cached anyway. On Fri, Sep 21, 2012 at 11:57 PM, Hassan Schroeder <
on 2012-09-21 20:06
On Fri, Sep 21, 2012 at 12:17 PM, Mirri Kim <mirri.kim@gmail.com> wrote: > I won't generally go with that approach: > > - Skill.all can get big > - You're doing 2 queries by default plus the array subtraction I don't think the two-queries part can be avoided. If Skill.all is big, maybe something like: Skill.where("skills.id NOT IN ?", user.skills.map(&:id)) Whatcha think? -Dave -- Dave Aronson, Available Secret-Cleared Ruby/Rails Freelancer (VA/DC/Remote); see www.DaveAronson.com, www.Codosaur.us, and www.Dare2XL.com for more info.
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.