查询属于模型后查询有多个模型

时间:2014-06-20 06:30:10

标签: ruby-on-rails ruby ruby-on-rails-4

我有两个型号User和Product以及一个用户has_many :products。 给定一组用户,我如何找到他们创建的产品。

问题:查找可在特定地址附近销售和销售的所有产品。所以我首先找到住在附近的所有用户。然后查询这些用户销售的所有产品。然后检查这些产品的可用性。但它不起作用。为什么这样?

在我的控制器索引操作中,我有:

@users = User.near(params[:nearby], 20)
@users.find_each do |user|
  @products << user.products_selling # <-- Does not work
end
@products = @products.available

product.rb型号

belongs_to :seller, class_name: 'User', foreign_key: :user_id, dependent: :delete
scope :available, -> { where(availableforsale: true) }

user.rb型号

has_many :products_selling,  class_name: 'Product'

错误是

undefined method `<<' for nil:NilClass

请注意 - 如果我将<<更改为=,那么它可以正常运行,但只有最后一位用户的产品才会被查询到所有用户(显然)。

请帮忙

1 个答案:

答案 0 :(得分:2)

@users = User.near(params[:nearby], 20)

@products = Product.where(["user_id IN (?)", @users.map(&:id)]).available

修复下面的代码,(但不好在循环内查询)

@products = [] # initialize empty array before you insert into it
@users.each do |user|
  @products << user.products_selling.to_a # To insert array of products rather than a Relation
  # Now @products is an Array of Arrays.
end
@products = @products.flatten.select(&:availableforsale) # Flatten the Array, and select only the ones availableForSale