Alışveriş Sepeti Oluşturma - Ruby on Rails

İçindekiler

Bir kullanıcının ürünleri seçebilmesi için bir alışveriş sepeti oluşturmadan önce, alışveriş sepetini kullanmayı öğrenmeliyiz. oturumlar içinde raylar üzerinde yakut; Bir kullanıcı sanal mağazamıza göz atarken, muhtemelen ürünleri seçecektir, normalde bu tür bir uygulama için kullanılan, ürünü, fiyatı, toplam maliyeti tutacağımız sanal bir alışveriş sepetine yüklememizdir. satın alma ve ürünlerin miktarı, bu, kullanıcının satın alma yapmaya karar verdiği nihai bir ödeme gerçekleşene kadar.
Önerdiğimiz buna uymak için, uygulamamızda kullanıcının seçtiği ürünlere sahip çıkmalıyız, bunun için kullanacağız. oturumlar, bu uygulama ile raylar Verileri veritabanlarında saklamaya gerek kalmadan kullanılabilir durumda tutabiliriz ve kombinasyonların kullanıldığı uygulamaya bağlantıyı kuran tarayıcıdan başlatan kullanıcı tarafından erişilebilir olacaktır. anahtarbir değer Bunlar depolanacak ve biz onları kullanıma sunacağız.
Bu kodun nasıl göründüğüne dair bir örnek görelim, mağaza kontrolöründeki uygulamamızda yeni bir metot oluşturalım:
 özel def find_cart oturumu [: cart] || = Cart.new end 

Yaklaşık 4 satır kod olmasına rağmen bunlar oldukça yüksek bir karmaşıklık gerektiriyor, önce private metodunu yapıyoruz, bu şekilde Rails'in controller içinde bir action olarak kullanılabilir hale gelmesini engelliyoruz, ardından koşullu atama operatörünü kullandığımızı görüyoruz | | =.
Bu operatör, aşağıdaki işlevleri gerçekleştirmemize izin veren yöntemde, buna karşılık gelen bir oturum karması varsa, anahtar: araba sonra içeriğini döndürürüz, aksi takdirde yeni bir Cart nesnesi oluşturur ve onu sessionn'a atarız, o zaman değerini döndürürüz.
Artık yaklaşımın teorik kısmında biraz ustalaştığımıza göre, oluşturmamız gereken işlevsellik konusunda biraz daha derinlemesine gideceğiz, alışveriş sepetimizi yaptıktan sonra yapılan her satışın fiyatı korumak zorunda olduğunu biliyoruz. adında bir tablo oluşturacağımız şey için yapıldığı satır_öğeleri, Bunun yapacağı şey, alıcının seçiminin satırını saklamak, şimdi veritabanımıza yerleştirmemiz gereken kodu görelim:
 varsa bırakma tablosu line_items; tablo oluştur line_items (id int ürün_kimliği int miktar int birim_fiyat ondalık (10,2) kısıtlaması fk_items_product birincil anahtarı (id)); boş değil auto_increment, boş değil, boş değil varsayılan 0, boş değil, yabancı anahtar (ürün_kimliği) ürünlere (id), birincil anahtara (id) başvuruyor); 

Yeni tablomuzun bu tanımında da görebileceğimiz gibi bir referans ekledik. yabancı anahtar product_id alanını ürün tablosunun id alanıyla ilişkilendiren bu ilişki, modeli oluşturduğumuzda bize hizmet edecektir.
Onunla etkileşime geçebileceğimiz tabloya sahip olduğumuz için, bunun için yeni bir model oluşturmalıyız ki onu uygulamamızda kullanabilelim. Komut konsolumuzdan aşağıdaki komutu kullanacağız raylar üzerinde yakut.
 depo> ruby ​​​​script / model oluştur LineItem Modelimiz oluşturulduktan sonra, ona aşağıdakileri ekleyeceğiz: [i] app / modeller / line_item.rb [/ i], çünkü tüm veritabanları Rails ilişkilerini desteklemez, işleme bunlardan açıkçası. class LineItem <ActiveRecord :: Tabana ait_to: ürün sonu 

Modelimizi ve uygulamamız için tabloları oluşturduktan sonra, geliştirmesi ile bitirmek ve çok daha gelişmiş uygulamalara atlamak için bir sıçrama tahtası görevi gören fonksiyonel bir alışveriş sepetine sahip olabilmek için sadece 2. bölümümüz kaldı.
Uygulamamız için alışveriş sepeti yapımına devam ediyoruz. raylar üzerinde yakutBunu yapmak için kurduğumuz modele bakmaya devam edelim ve konunun arkasındaki açıklamayı biraz görelim. Raylar LineItem modelimizin şu kod satırına sahip olduğunu söyleyerek, bunları açıkça bildirdikten sonra tablolar arasındaki ilişkilerin nasıl ele alınacağını çıkarmanıza izin veren bir kuralı işler: ait_to: ürün, Rails motoru tablo içinde product_id adında bir alan olması gerektiğini zaten biliyor.
Şimdi alışveriş sepetimizi oluşturmak için gerekli kodu oluşturacağız, önce alışveriş sepetine ürün eklemek için mağazamızın denetleyicisinde yöntemi uygulamamız gerekiyor. İlk önce bu denetleyiciyi bulacağız: uygulama / denetleyiciler / store_controller.rb ve içeride yöntemi oluşturacağız Sepete ekle içinde aşağıdaki kod ile.
 def add_to_cart product = Product.find (params [: id]) @cart = find_cart @ cart.add_product (product) redirect_to (: action => 'display_cart') end 

Şimdi Cart sınıfımızı oluşturmalıyız, bu belirli sınıf modele bağlı değil Aktif Kayıt Veritabanı ile etkileşime girmediğinden, işleri bizim için kolaylaştırmak için dizinimizde manuel olarak oluşturacağız. uygulama / modeller, orada dosyayı oluşturacağız cart.rb.
Yeni dosyamızın içine aşağıdakileri yerleştireceğiz:
 class Sepet attr_reader: item attr_reader: total_price def initialize @items = [] @total_price = 0.0 end def add_product (ürün) @items << LineItem.for_product (ürün) @total_price + = product.price end end 

Şimdi bu işlem tamamlandıktan sonra LineItem modelimize gidelim ve eksiklerimizi yerleştirelim:
 class LineItem <ActiveRecord :: Tabana ait_to: ürün def self.for_product (ürün) item = self.new item.quantity = 1 item.product = ürün item.unit_price = product.price item end end 

Şimdiye kadar sahip olduklarımızın kısa bir özetini yapalım. Sepete bir ürün eklememize izin veren yöntemimiz zaten var, bu Sepete ekle, o zaman sınıfımızın içeriğine sahibiz Araba bu, bir ürün eklememize ve sınıfımızda son kalmamıza izin verir. Satır Öğesi eklediğimiz ürünlerin değerlerini çıkarabiliyoruz. Uygulamamızın çalışması için sadece birkaç öğe daha uygulamamız gerekiyor, önce görünümü göstermemize izin veren bir eylem eklemeliyiz ve bunu başaramazsak, onu oluşturmak için aşağıdakileri ekleyeceğiz:
 def display_cart @cart = find_cart @items = @ cart.items sonu 

Bu yöntem, şimdi bizim görüşümüze göre kontrolörümüze girecek: uygulama / görünümler / mağaza, bir dosya oluşturacağız display_cart.rhtml ve içine aşağıdaki kodu yerleştireceğiz:

Sepetinizde şeyler var.


Tabii ki bu hala çalışmıyor ama son bir adım daha eklemeliyiz ve bunun için uygulama kapsamında yeni modellerimizi tanımlamak için gideceğiz. uygulama / denetleyiciler ve adında bir dosya göreceğiz uygulama.rb aşağıdakileri yerleştirmemiz gereken:
 class ApplicationController <ActionController :: Temel model: sepet modeli: line_item end 

Bununla zaten sahip olurduk Alışveriş kartı temel ama bu bizi tamamen genişletilmiş işlevselliğe sahip nihai bir ürünü uygulamaya daha da yaklaştıracak. Bununla, bu öğreticiyi bitiriyoruz raylar üzerinde yakut ve neden işe yaradığını anlamak ve bu şekilde kaliteli bilgi üretmek için yerleştirdiğimiz kodu dikkatli bir şekilde analiz etmemiz gerektiğini belirtmek önemlidir.Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.

Arkadaşlarınızla sayfasını paylaşan sitenin gelişimine yardımcı olacak

wave wave wave wave wave