我的设置:Rails 2.3.10、Ruby 1.8.7
我想要一些反馈,了解在单个事务中涉及多个模型的逻辑代码和 REST API 的最佳放置位置。比如用户需要购买一个产品,就会涉及到
- 检查他是否有足够的钱(用户模型)
- 检查产品是否有货(产品型号)
- 计算运费(邮政编码、产品型号)
- 减去钱
- 更新产品库存数量
- ...
您已经了解了总体思路。假设我需要提供一个购买 REST API,它应该进入哪个 Controller ?实际的逻辑应该去哪里?它应该在与 Controller 关联的模型中吗?感谢任何见解。
最佳答案
我不知道约定是什么(如果有的话),但我倾向于以“名词-动词”格式进行多模型交易。例如,如果用户
想要购买产品
,我会这样做:
class User < ActiveRecord::Base
...
def purchase(product)
product.logic
self.step_3_profit
etc
end
end
Controller 的工作原理类似,尽管我通常用被动语态来思考它(例如,“正在对什么名词执行什么动词”,而不是“什么名词正在执行什么动词”。对于例如,如果购买 Product
,则可能是向 /products/1/purchase
发送 POST
,并使用以下 Controller 代码:
class ProductsController < ApplicationController
include SessionsHelper
def purchase
current_user.purchase Product.find(params[:id])
do_view_stuff
end
end
使用这些“约定”,我可以通过思考对哪个名词执行什么动词来轻松找到应用程序中的逻辑。
关于ruby-on-rails - (MVC) 跨越多个模型的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5113906/