我的应用从Shopify商店导入产品。它需要满足以前导入我的应用程序数据库的产品,并显示自上次导入以来已添加到Shopify商店的所有新产品。
我的观点是:
# All new products in Shopify
<% @products.each do |product| %>
<tr>
<td><%= product.id %></td>
<td><%= product.title %></td>
</tr>
<% end %>
# All existing products in my app
<% @myproducts.each do |myproduct| %>
<tr>
<td><%= myproduct.id %></td>
<td><%= myproduct.title %></td>
</tr>
<% end %>
负责抓住这些内容的ProductsController
控制器部分是:
@products = ShopifyAPI::Product.find(:all)
@myproducts = Product.where.not(id: nil)
问题是第一个循环显示Shopify商店中的所有产品,包括那些已经在@myproduct.each do
循环中的产品。所以我们最终会有很多翻倍。
我需要@products.each
循环才能显示product.id
尚不存在myproduct.id
的产品。
我应该在我的视图中使用if语句还是在@products = ShopifyAPI::Product.find(:all)
中使用某些条件?
答案 0 :(得分:1)
是的!
ShopifyAPI::Product.find(:all)
将获取商店中的所有商品。
所以你需要将条件添加到控制器中。
选项1
@myproducts = Product.where.not(id: nil).select(:id, :title)
@products = ShopifyAPI::Product.find(:all)
myproducts_titles = @myproducts.map(&:title)
@products = @products.reject do |product|
myproducts_titles.include? product.title
end
1选项
@myproducts = Product.where.not(id: nil).select(:id, :title)
myproducts_titles = myproducts.map(&:title)
@products = ShopifyAPI::Product.find(:all)
products_titles = @products.map(&:title)
newproducts_titles = products_titles - myproducts_titles
@products = @products.select do |product|
newproducts_titles.include? product.title
end
我不确定哪个选项更快
答案 1 :(得分:1)
我自己尝试过一些东西。我介绍说:
@productIds = Product.pluck(:product_id)
然后是一个新循环:
@products.delete_if do |product|
if product.id.in?(@productIds)
true
end
end
现在似乎就是这样做的。