我有四个模型-用户,代理商,列表和查询。
[用户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
我尝试组合各种select
,includes
,where
等方法,但无法提出可行的解决方案。
谢谢您的帮助,不胜感激!
首先,如果您使用的是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
为您提供了传递给它的所有列的数组。
我们可以在单个查询中使用多个联接,直到达到结果关联为止。
def index
@inquiries = Inquiry.joins(listing: { agency: :user }).where(users: { id: params[:user_id] })
render json: @inquiries
end