我有2个模型,一个是商店,另一个是地址,一个商店有很多地址,并且一个地址属于商店。 我想按名称选择(搜索)并过滤与搜索字词匹配并针对每个地址分开的所有商店,例如 搜索参数[:名称]
def filter_shops
@shops = Shop.where("name ILIKE CONCAT('%',?,'%')",params[:name])
end
因此,此操作按参数名称搜索所有商店,但我希望如果商店有2或3个地址,则必须在结果中显示2-3次。示例(预期结果):
params[:name] value is "sho"
[{name: "shopOne",
address: {
id: 1,
direction: "av. jojojo 321"}
},{name: "shopOne",
address: {
id: 2,
direction: "onother avenue "}},
{name: "shopTwo",
address: {
id: 7,
direction: "av. of other shop 333"}
}]
非常感谢
答案 0 :(得分:1)
您需要JOIN个表:
Shop.joins(:adresses).where("shops.name ILIKE CONCAT('%',?,'%')", params[:name])
更新
如果您需要根据示例创建数组,则可以这样做(为方便起见使用多种方法):
def create_array
addresses.map do |address|
{
name: address.shop.name,
address: {
id: address.id,
direction: address.direction
}
}
end
end
def addresses
Address.eager_load(:shop)
.where("shops.name ILIKE CONCAT('%',?,'%')", params[:name])
.order(:shop_id)
end