首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby on rails 5根据相关的表数量显示所有结果

Ruby on rails 5根据相关的表数量显示所有结果
EN

Stack Overflow用户
提问于 2018-06-20 03:23:04
回答 1查看 51关注 0票数 0

我有两个模型,一个是商店,另一个是地址。一个商店有许多地址,一个地址属于一个商店。

我想要按名称选择(搜索),并过滤所有与搜索词匹配并为每个地址分隔的商店,例如search param[:name]

代码语言:javascript
运行
复制
def filter_shops
     @shops = Shop.where("name ILIKE CONCAT('%',?,'%')",params[:name])
end

这个动作通过参数名搜索所有的商店,但我希望如果一个商店有2到3个地址,它必须在结果中显示2-3次。

示例(预期结果):

代码语言:javascript
运行
复制
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"}
}]
EN

回答 1

Stack Overflow用户

发布于 2018-06-20 03:45:54

您需要对表执行JOIN操作:

代码语言:javascript
运行
复制
Shop.joins(:adresses).where("shops.name ILIKE CONCAT('%',?,'%')", params[:name])

更新

如果你需要从示例中创建一个数组,你可以这样做(为了方便,使用多种方法):

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50935578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档