2011-02-25 83 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 

使用这些‘什么动词公约’ ,我可以轻松通过考虑对什么名词做了什么动词,将逻辑定位在我的应用程序中。