ruby-on-rails - (MVC) 跨越多个模型的逻辑

标签 ruby-on-rails model-view-controller

我的设置:Rails 2.3.10、Ruby 1.8.7

我想要一些反馈,了解在单个事务中涉及多个模型的逻辑代码和 REST API 的最佳放置位置。比如用户需要购买一个产品,就会涉及到

  1. 检查他是否有足够的钱(用户模型)
  2. 检查产品是否有货(产品型号)
  3. 计算运费(邮政编码、产品型号)
  4. 减去钱
  5. 更新产品库存数量
  6. ...

您已经了解了总体思路。假设我需要提供一个购买 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/

相关文章:

ruby-on-rails - 如何 stub :where method in Rspec?

ruby-on-rails - 无法从 Rails 中的/lib 访问模型

php - MVC 模式 : what needs to be created first?

javascript - Ajax 调用返回 viewmodel 但 View 不显示结果

ruby-on-rails - 动态查询生成器堆栈对于 Arel 查询 Rails 来说太深

ruby-on-rails - 在 Rails 5(和 6 使用经典自动加载器)中包含 `lib/` 文件的推荐方法是什么?

ruby-on-rails - 在生产中重新编译 Sass Assets

ruby-on-rails - 当数据库格式为 DateTime 时,如何从数据库中选择不同的日期

asp.net-mvc - ASP.net MVC - View 如何访问模型?

java - MVC如何与Java Swing GUI一起工作