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

时间:2011-05-01 01:30:47

标签: ruby-on-rails controller

您好 我是RoR的新手。如何将简单的控制器逻辑切换到模型? 我的数据库列是order_type,quantity,quantity_adjusted

控制器

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

由于 LH

2 个答案:

答案 0 :(得分:2)

有很多方法可以做到这一点。一种可能最自然的方法是创建一个实例方法,如:

def adjust_quantity(amount)
  (put logic here)
end

在您的商品型号中。然后在你的控制器中,你会这样做:

@product.adjust_quantity(quantity)

答案 1 :(得分:0)

您可以在模型中使用回调。例如。 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