我有两个型号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
请注意 - 如果我将<<
更改为=
,那么它可以正常运行,但只有最后一位用户的产品才会被查询到所有用户(显然)。
请帮忙
答案 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