ruby-on-rails - 如何重构这个 Rails Action ?

标签 ruby-on-rails ruby ruby-on-rails-3

<分区>

如何重构这个简单的 new 操作?

def new
  @payment = Payment.new(:invoice_id => params[:invoice_id])
  if @payment.invoice.present?    
    @payment.amount = @payment.invoice.balance.abs
  end
  @title = "New payment"
end

我觉得有点笨拙。

感谢您的帮助!

最佳答案

为了简化您的 Controller ,您应该将业务逻辑移动到您的模型中。

这里有三个建议:

如果 invoice_id 在您的 Payment 实例中不会改变,并且您不需要缓存:

  def amount
    invoice.balance.abs
  end

如果 invoice_id 不会在您的付款实例中发生变化,但您在 Controller / View 中多次使用金额值。 (使用缓存):

  def amount
    @_amount ||= invoice.balance.abs
  end

如果 invoice_id 可能会在您的付款实例中发生变化,并且您需要缓存:

  def amount
    @_amount ||= {}
    @_amount[invoice_id] ||= invoice.balance.abs
  end

end

关于ruby-on-rails - 如何重构这个 Rails Action ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12829445/

相关文章:

ruby-on-rails - Rails 如何知道迁移正在等待中?

ruby - 在模块/类之间共享全局记录器

ruby-on-rails - Rails 应用程序中初始化 DRb 服务的正确位置在哪里?

mysql - Rails - Active Record 中不相等

ruby-on-rails - xmpp 服务器和 ruby​​ on rails 集成建议?

ruby-on-rails - Rails error resource_name - 设计帮助路由和渲染

ruby-on-rails - 在 Rails 应用程序上使用 Prawn gem 重复页脚与当前页面和每页的总页数,但重叠当前页码

ruby-on-rails - IE8做Ajax时在utf8字段上卡住

jquery - 如何正确地将模型与 2 个不同的对象关联?(Rails 4)

ruby-on-rails - Rails ActiveMerchant - Paypal 快速结帐错误