【问题标题】:Rails 3 - select data from 3 tablesRails 3 - 从 3 个表中选择数据
【发布时间】:2012-02-16 15:21:52
【问题描述】:

我有这 3 个模型:

class Car < ActiveRecord::Base
  belongs_to :user
  has_many :car_styles
  has_many :styles, :through => :car_styles
end


class CarStyle < ActiveRecord::Base
  belongs_to :car
  belongs_to :style
end


class UserStyle < ActiveRecord::Base
  belongs_to :style
  belongs_to :user  
end


class User < ActiveRecord::Base     
  has_many :cars

  has_many :car_styles
  has_many :styles, :through => :car_styles

结束

我已经登录了一个用户 (current_user)。我正在尝试选择所有汽车,其中 car style_iduser style_id 相同 - 我该怎么做?

提前感谢您的帮助

编辑:架构:

汽车

-id
-user_id

汽车样式

-car_id
-style_id

user_styles

-user_id
-style_id

每个用户都保存了最喜欢的样式 - 不管多少(但大约为 ±5)。每张照片都添加了一种样式 - 再一次没有关系。

我想从表 Cars 中选择所有汽车,它们与 current_user 添加的样式相同。

【问题讨论】:

    标签: mysql ruby-on-rails-3 activerecord join include


    【解决方案1】:

    我认为你在这里说的是你有三个主要模型:

    汽车、用户和风格

    CarStyle 和 UserStyle 是连接对吗?

    如果是这样,你应该可以说:

    Car.joins(:styles => [:users]).where(:users => {:id => current_user.id })
    

    如果没有,您能否使用您的架构更新问题?

    【讨论】:

    • 感谢您的回复,但不幸的是,此查询对我不起作用,我更新了我的问题。
    • 当我尝试这个时,它似乎工作正常:github.com/Bodacious/CarUserStyles 我创建了一堆汽车,并为其中一半提供了与用户相同的样式,而另一半则没有。它会返回那些...
    • 您必须在末尾添加 .uniq 以防止重复记录...Car.joins(:styles =&gt; [:users]).where(:users =&gt; {:id =&gt; current_user.id }).uniq
    • 你绝对让我很开心......现在我正在解决 DISTINCT 的结果:) 谢谢!!!你原来的查询是对的,我的style 模型失败了。再次感谢您!
    • 如果我考虑一下 - 我怎么能得到所有行,除了我的?
    猜你喜欢
    • 1970-01-01
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多