我有两个模型,一个是商店,另一个是地址。一个商店有许多地址,一个地址属于一个商店。
我想要按名称选择(搜索),并过滤所有与搜索词匹配并为每个地址分隔的商店,例如search param[:name]。
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"}
}]发布于 2018-06-20 03:45:54
您需要对表执行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)
endhttps://stackoverflow.com/questions/50935578
复制相似问题