将代码从控制器移动到模型(瘦控制器胖模型)

发布于 2024-11-04 11:15:43 字数 447 浏览 1 评论 0原文

你好 我是 RoR 的新手。如何将简单的控制器逻辑切换到模型? 我的数据库列是 order_type、数量、数量_调整

控制器

def create

 @product = Product.new(params[:product])

 # This is the control structure I want to move to Model

 if @product.order_type = "Purchase"
  @product.quantity_adjusted = -quantity
 else
  @product.quantity_adjusted = quantity
 end

end

型号

class Product < ActiveRecord::Base
end

谢谢 黄体激素

Hello
I'm new in RoR. How can I switch my simple controller logic to the model?
My database columns is order_type, quantity, quantity_adjusted

Controller

def create

 @product = Product.new(params[:product])

 # This is the control structure I want to move to Model

 if @product.order_type = "Purchase"
  @product.quantity_adjusted = -quantity
 else
  @product.quantity_adjusted = quantity
 end

end

Model

class Product < ActiveRecord::Base
end

Thanks
LH

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

日暮斜阳 2024-11-11 11:15:43

有很多方法可以做到这一点。 创建一个实例方法,例如 :

def adjust_quantity(amount)
  (put logic here)
end

一种可能是最自然的方法是在您的产品模型中 。然后在你的控制器中,你会这样做:

@product.adjust_quantity(quantity)

There are many ways to do it. One way, possible the most natural, is to create an instance method like :

def adjust_quantity(amount)
  (put logic here)
end

in your Product model. Then in your controller, you would do :

@product.adjust_quantity(quantity)
单身狗的梦 2024-11-11 11:15:43

您可以在模型中使用回调。例如after_create

控制器:

def create
  @product = Product.new(params[:product])

  if @product.save
    # redirect
  else
    render :new
  end
end

型号:

class Product < ActiveRecord::Base
  after_create :adjust_quantity

  private

  def adjust_quantity
    if self.order_type == "Purchase"
      self.quantity_adjusted = -quantity
    else
      self.quantity_adjusted = quantity
    end
  end
end

You could use a callback in your model. E.g. after_create.

Controller:

def create
  @product = Product.new(params[:product])

  if @product.save
    # redirect
  else
    render :new
  end
end

Model:

class Product < ActiveRecord::Base
  after_create :adjust_quantity

  private

  def adjust_quantity
    if self.order_type == "Purchase"
      self.quantity_adjusted = -quantity
    else
      self.quantity_adjusted = quantity
    end
  end
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文