使用ActiveRecord查询记录列表,其中每个项目的外键都存在于哈希中

问题描述 投票:0回答:2

我有四个模型-用户,代理商,列表和查询。

[用户has_one代理商,代理商has_many列表和列表has_many查询。

我在查询中会得到:user_id,因此可以获取其代理商和清单集合。

我需要属于某个列表的查询。

我的方法如下,显然我正在寻找all的替代品。我想进行查询,在其中可以列出所有查询,其中:listing_id@listings中列表之一的ID。

  def index
    @agency = User.find(params[:user_id]).agency
    @listings = @agency.listings

    @inquiries = Inquiry
      .all

    render json: @inquiries
  end

我尝试组合各种selectincludeswhere等方法,但无法提出可行的解决方案。

谢谢您的帮助,不胜感激!

ruby-on-rails ruby postgresql activerecord rails-activerecord
2个回答
1
投票

首先,如果您使用的是RuboCop之类的工具,它可能会警告您通常只在这样的方法中传递一个,可能是两个实例变量。并不是说我没有做到这一点,它只是不考虑最佳的Rails。那说:

一种可能是这样:

def index
  @agency = User.find(params[:user_id]).agency
  @listings = @agency.listings

  @inquiries = Inquiry.where(listing_id: @listings.pluck(:id))

 render json: @inquiries
end

您可以传递一系列与where相匹配的内容。 pluck为您提供了传递给它的所有列的数组。


0
投票

我们可以在单个查询中使用多个联接,直到达到结果关联为止。

def index
  @inquiries = Inquiry.joins(listing: { agency: :user }).where(users: { id: params[:user_id] })

 render json: @inquiries
end
© www.soinside.com 2019 - 2024. All rights reserved.