2011-02-25 84 views
1

我的設置:Rails的2.3.9,紅寶石1.8.7(MVC)邏輯跨越多個模型

我想在這裏最好是把邏輯代碼,和REST API的一些反饋,觸及多個模型一筆交易。例如,用戶需要購買產品,它會涉及

  1. 檢查他是否有足夠的錢(用戶模式)
  2. 檢查產品是否可用(產品型號)
  3. 計算運費(郵編,產品型號)
  4. 減錢
  5. 更新產品可用性數
  6. ...

你得到了一般想法。假設我需要提供一個購買REST API,應該使用哪個控制器?實際的邏輯應該到哪裏去?它應該在與控制器相關的模型中嗎?欣賞任何見解。

回答

3

我不知道約定是(如果有的話),但我傾向於以「名詞動詞」格式進行多模式交易。例如,如果一個User想購買Product,我會做:

class User < ActiveRecord::Base 
    ... 
    def purchase(product) 
    product.logic 
    self.step_3_profit 
    etc 
    end 
end 

控制器的工作原理相似,雖然我通常認爲它在被動語態(例如,「什麼動詞正在做什麼名詞」,而不是‘什麼名詞做’舉個例子,如果一個Product正在購買的,它可能是一個POST/products/1/purchase,用下面的控制器代碼:

class ProductsController < ApplicationController 
    include SessionsHelper 

    def purchase 
    current_user.purchase Product.find(params[:id]) 
    do_view_stuff 
    end 
end 

使用這些‘什麼動詞公約’ ,我可以輕鬆通過考慮對什麼名詞做了什麼動詞,將邏輯定位在我的應用程序中。