我的客户模型有很多视频和视频有很多视频活动。
我想加入视频活动,以限制属于具有特定电子邮件域的客户的视频。
此代码将为我提供属于id为52的客户的所有视频活动,但由于视频没有客户电子邮件,我需要将客户加入视频,然后执行.where。
VideoActivity.joins(:video).where(videos: {customer_id: 52})
这是怎么做到的?执行VideoActivity.joins(:video).joins(:customer)
会给我一个错误,指出VideoActivity没有与之关联的客户。
答案 0 :(得分:0)
有很多方法可以做到这一点,并且最终都在同一个地方,但使用明确的where语句将很容易实现这一目标。
VideoActivity.joins(:video).where("videos.customer_id = ?", 52)
答案 1 :(得分:0)
VideoActiviy与客户没有任何关系,您需要说客户与视频相关,然后更容易使用活动记录#merge
进行哈希{{1} }}
where
如果你在视频中有一个范围,你也可以使用它,这是一个例子
VideoActivity.joins(video: :customer).merge(Customer.where('some condition'))
<强> PS:强>
范围可以是
VideoActivity.joins(video: :customer).merge(Customer.some_scope)
然后使用它
# customer model
scope :email_ends_with, ->(string) { where('email ilike ?', "%#{string}") }
答案 2 :(得分:0)
您可以编写普通的sql来获取记录
activities = VideoActivity.joins('INNER JOIN videos ON video_activities.video_id = videos.id INNER JOIN customers ON videos.customer_id = customers.id')
activities.where('customers.email = ?', customer_email)