2014-08-28 48 views
1

我有一個網站,我將不得不實施電子支付。問題是,我對這些東西有0知識,我的網站甚至運行在http不是https ..從電子商務和Rails開始4

我知道我可以使用active_merchant來處理付款,但我該如何開始?

任何資源請爲初學者?

回答

1

我一直在思考這個做一個教程 - 我們已經有了一個基本的Rails的電子商務應用程序,你可以在http://firststopcosmeticshop.co.uk

查看這不是完全結束,但應該給你一個想法,怎麼樣你可以爲人們創建一個電子商務應用程序。我將詳細介紹一下結構的一些東西在這裏爲你:

-

電子商務

有幾個特點考慮與電子商務應用:

  1. 「購物車」將如何持續
  2. 如何在屏幕上顯示產品
  3. 如何管理選項的產品
  4. 如何管理商店

的「後臺」,我將介紹一些功能,這些在這裏。我不能寫太多,因爲它最終會迷惑你...


1.車

如果你打算做一個電子商務應用程序,你需要一輛推車。我們使用了session-based model;但另一種方法是創建一個Cart模型本身,它依賴於數據庫

購物車的底線是你需要一種方法來保存數據。數據持久性就是讓數據在瀏覽器中「停留」的方式,即使在您對Rails服務器的請求之間也是如此。由於Rails是一個stateless框架,它會將每個請求視爲「裸體」 - 這意味着如果要保留數據,則必須使用某種方法來識別它。

對於我們的車,我們用一個非常簡單的sessions系統 - 因此,如果你添加一個新的產品加入購物車,這將是產品ID添加到您的會話,從而給你一個永久車店:

[我可以包含代碼,如果你想讓它]

-

2。產品

您可以創建一個Product模型:

#config/routes.rb 
resources :products, only: [:index, :show] 

#app/models/product.rb 
class Product < ActiveRecord::Base 
    belongs_to :category 
end 

#app/controllers/products_controller.rb 
class ProductsController < ApplicationController 
    def index 
     @products = Product.all 
    end 

    def show 
     @product = Product.find params[:id] 
    end 
end 

#app/views/products/index.html.erb 
<% @products.each do |product| %> 
    <%= product.name %> 
<% end %> 

-

您還需要一種方法來管理產品

3.產品選項選項。如果你買了一件T恤,你要確保你有不同的sizes等,這是棘手的(尤其是在那裏你必須容納這麼多不同的選擇化妝品),但我們找到了一種方法:

#app/models/option.rb 
class Option < ActiveRecord::Base 
    has_many :product_options 
    has_many :products, through: :product_options 
end 

#app/models/product_option.rb 
class ProductOption < ActiveRecord::Base 
    belongs_to :product 
    belongs_to :option 
end 

#app/models/product.rb 
class Product < ActiveRecord::Base 
    has_many :product_options 
    has_many :options, through: :product_options 
end 

這會給你打電話的能力@product.options

這裏的竅門是填充ProductOption模型一系列有關選項本身不同屬性的。例如:

#products 
id | title | price | created_at | updated_at 
x | xbox | 399.99 |  x  |  x 

#product_options 
id | product_id | option_id | name | created_at | updated_at 
x |  1  |  2  | blue |  x  |  x 
x |  1  |  1  | wifi |  x  |  x 
x |  1  |  3  | chip |  x  |  x 
x |  1  |  2  | pink |  x  |  x 

#options 
id | name  | created_at | updated_at 
x | accessory |  x  |  x 
y | colour  |  x  |  x 
z | upgrades |  x  |  x 

這會給你巨大的可擴展性 - 爲您提供建立一個真正引人注目的結構店裏的能力&你的產品

-

4.後端

您可以通過使用namespace

#config/routes.rb 
namespace :admin do 
    root "products#index" 
    resources :products, only: [:index, :new, :create] #-> domain.com/admin/products/new 
end 

這允許您創建/admin文件夾內的「迷你應用程序」:

#app/controllers/admin/products_controller.rb 
class Admin::ProductsController < ApplicationController 
    before_action :authenticate_user! 

    def index 
     @products = Product.all 
    end 

    def new 
     @product = Product.new 
    end 

    def create 
     @product = Product.new product_params 
     @product.save 
    end 

    private 

    def product_params 
     params.require(:product).permit(:title, :price) 
    end 
end 

你會想驗證使用Devise管理區,讓您創建僅用於用戶/管理員的一個私人區域。是爲Rails最全面的支付網關管理器 -


更新

要處理款項,您使用ActiveMerchant

這已經從一些Shopify源的提取是最好的。我會高度推薦使用它,特別是如果你是新的。

我就不贅述了(你可以看到如何使用this Railscast設置它) - 來得到它的工作,我會創建一個「訂單」控制器&型號:

#config/routes.rb 
resources :orders, only: [:new, :create], path_names: { new: "" }, path: :order 

#app/models/order.rb 
Class Order < ActiveRecord::Base 
end 

#app/controllers/orders_controller.rb 
class OrdersController < ApplicationController 

    def new 
     #start payment here 
    end 

    def create 
     #if payment successful, continue 
     @order = Order.new order_params 
     @order.save 
    end 

    private 

    def order_params 
     params.require(:order).permit(:x, :y, :z) 
    end 
end 

這您可以撥打以下網址:domain.com/order,您可以從中輸入付款詳細信息,將付款發送至PayPal或類似商品,然後將買家退還至「謝謝」頁面。

+0

你好,感謝您的答案!但我想知道你如何處理銀行/網關和東西?我的網站只需要支付一次,這不是產品相關 – 2014-08-28 11:58:08

+0

嘿芽!你應該在你的問題上更具體一些!我會爲你寫一個更新! – 2014-08-28 12:39:50