Ruby on Rails 5带关联的复杂范围查询

时间:2017-11-07 11:53:53

标签: ruby-on-rails

我有3个型号产品,选项和评论。产品有很多选项,并有很多评论。选项属于产品,评论属于产品。

我想在Comment模型中创建一个范围,以获取product_id与Option模型中的product_id匹配的所有注释,然后检查Comment模型中的属性“message”是否类似于属于任何选项到那个product_id。我有一个将产品变量传递给Comments模型的worker。

我可以使用以下代码接近,但我想使其动态而不是硬编码查询的第二部分。

Comments.rb

scope :get_options, -> (product) { where(“comments.product_id = ? AND comments.message LIKE ?”), product.id, “Large Blue” } 

此处,Large Blue是Option表中存在的选项的示例。

这个范围正在模仿我想要返回的内容,但是我想调用属于该产品的Options而不是硬编码。

对此问题的最佳实践的任何帮助将不胜感激!

由于

1 个答案:

答案 0 :(得分:0)

对于sqlite

Comment.joins(product: :options).where("comments.product_id = ? AND comments.message LIKE '%' || options.title || '%'")

我认为这应该与你看起来非常接近的工作