У меня есть веб-крючок с параметрами, которые я хочу сопоставить с существующими записями локальных моделей ..
Вот задание на работу в сети:
..
shop = Shop.find_by(shopify_domain: shop_domain)
shop.with_shopify_session do
line_items = webhook[:line_items]
line_items.each do |item|
variant_id = item[:variant_id]
product_id = item[:product_id]
@shop = Shop.find_by(shopify_domain: shop_domain)
@shop_products = ShopProduct.where(shop_id: shop.id)
@shop_products.each { |s| shop_store_products = s.store_product_id
if shop_store_products == product_id
@order = Order.new(store_product_id: product_id, shop_order_id: webhook[:id], location_id: webhook[:location_id], shop_product_id: s.product_id)
@order.shop_id = @shop.id
@order.save!
end
}
end
..
Веб-крючок в порядке. Когда я удаляю операторы .each
и if
, ордер сохраняется, но все ордера сохраняются, и мне нужно отфильтровать их только к совпадающим, как описано ниже.
Я хочу, чтобы это входило в мою модель заказов, только если ShopProduct.store_product_id совпадает с входящим product_id
Эти два значения должны совпадать, как если бы я создавал / сохранял ShopProduct, он принесет соответствующий product_id.
У меня есть эти записи в моей базе данных, так что это не проблема.
Вот мои модели:
**shop.rb**
belongs_to :shop_products
belongs_to :user
**shop_product.rb**
belongs_to :product
has_one :shop
has_one :order
**order.rb**
belongs_to :product
belongs_to :shop_product
Схема:
create_table "orders", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "shop_order_id"
t.string "shop_product_id"
t.string "location_id"
t.integer "shop_id"
t.string "tracking_numbers"
t.string "store_product_id"
end
create_table "shop_products", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "product_id"
t.string "store_product_id"
t.integer "shop_id"
end
create_table "shops", force: :cascade do |t|
t.string "shopify_domain", null: false
t.string "shopify_token", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "user_id"
t.index ["shopify_domain"], name: "index_shops_on_shopify_domain", unique: true
end
Цель: Создать заказ на каждый соответствующий идентификатор product_id для входящего в ShopProduct.store_product_id.
Вопрос: Как я могу получить желаемый результат?
Например, я не могу получить массив @ shop_product.store_product_id's ... Даже в консоли я не могу, это приводит только к следующему:
irb(main):009:0> shop_products.each { |s| sp = s.store_product_id }
=> [#<ShopProduct id: 1, created_at: "2019-06-06 23:45:04", updated_at: "2019-06-06 23:45:04", product_id: 1, store_product_id: "1965852786737", shop_id: 1>, #<ShopProduct id: 2, created_at: "2019-06-07 01:50:15", updated_at: "2019-06-07 01:50:15", product_id: 1, store_product_id: "1234567890", shop_id: 1>]
irb(main):010:0> sp
Traceback (most recent call last):
1: from (irb):10
NameError (undefined local variable or method `sp' for main:Object)
irb(main):011:0>
Разве sp
не должен выводить массив совпадающих записей?