我觉得这很简单,但我发现的任何东西似乎都没有用。我正在使用带有Rails 5的PostgreSQL数据库。我需要运行一个查询,查找名称列中包含文本字符串的所有产品,或者在关联模型中找到相同的字符串。这是我的模型结构。
class NormalBrand < ApplicationRecord
has_many :normal_models
end
class NormalModel < ApplicationRecord
belongs_to :normal_brand
has_many :products
end
class Product < ApplicationRecord
belongs_to :normal_model
end
每个模型都有一个名为&#34; name&#34;的字段。我正在尝试在我的Products控制器中创建一个查询,该查询找到所有在3个模型中的任何一个中找到文本字符串的产品&#34; name&#34;柱。像这样......
@products = Product.where("name like lower(?)", "%#{value}%").or.where("normal_model.name like lower(?)", "%#{value}%").or.where("normal_model.normal_brand.name like lower(?)", "%#{value}%")
我知道上面的查询是完全错误的,我应该有某种联接声明,但那是我需要帮助的地方。提前致谢。
答案 0 :(得分:3)
加入normal_model
和normal_brand
,然后您可以查询所有三个表
@products =
Product
.joins(normal_model: :normal_brand)
.where("products.name like lower(?)", "%#{value}%")
.or.where("normal_models.name like lower(?)", "%#{value}%")
.or.where("normal_brands.name like lower(?)", "%#{value}%")
或者只是在一个原始的地方
@products =
Product
.joins(normal_model: :normal_brand)
.where("products.name LIKE lower(:term) OR
normal_models.name LIKE lower(:term) OR
normal_brands.name LIKE lower(:term)", term: "'%#{value}%'")