<分区>
如何重构这个简单的 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
我觉得有点笨拙。
感谢您的帮助!
<分区>
如何重构这个简单的 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-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字段上卡住