我想要一个干净的代码,我觉得这很笨重.
有一个更好的方法吗?
User.try(:profile).try(:settings).try(:card).try(:options)
Run Code Online (Sandbox Code Playgroud)
如果我删除了try方法,我会得到一个nil方法错误.
是否还有另一段代码可以执行以下操作:
User.try(:profile,:settings, :card, :options)
Run Code Online (Sandbox Code Playgroud) 我正在将动态错误页面实现到应用程序中,并且感觉它正在查找public(现在不存在的)模板的文件夹,而不是遵循我设置的路由.
在config/application.rb我添加了这一行config.exceptions_app = self.routes的帐户.
然后我将以下内容添加到我的路线中:
get "/not-found", :to => "errors#not_found"
get "/unacceptable", :to => "errors#unacceptable"
get "/internal-error", :to => "errors#internal_error"
Run Code Online (Sandbox Code Playgroud)
而错误控制器看起来像这样:
class ErrorsController < ApplicationController
layout 'errors'
def not_found
render :status => 404
end
def unacceptable
render :status => 422
end
def internal_error
render :status => 500
end
end
Run Code Online (Sandbox Code Playgroud)
/not-found尽管访问任何不存在的URL(即/ i-dont-exist),但是要显示模板应该是一个空页面.
我可以看到的唯一原因是异常处理需要路由,例如get "/404", :to => "errors#not_found",具有讽刺意味的是,它没有找到/ 404的路由(并且没有,这不仅仅是它工作:)).
任何建议,非常感谢.谢谢,史蒂夫.
想象一下,我有一个p有2股票的投资组合port_stocks.我想要做的是对每个进行计算port_stock,然后总结所有结果.
[60] pry(main)> p.port_stocks
=> [#<PortStock:0x00007fd520e064e0
id: 17,
portfolio_id: 1,
stock_id: 385,
volume: 2000,
purchase_price: 5.9,
total_spend: 11800.0>,
#<PortStock:0x00007fd52045be68
id: 18,
portfolio_id: 1,
stock_id: 348,
volume: 1000,
purchase_price: 9.0,
total_spend: 9000.0>]
[61] pry(main)>
Run Code Online (Sandbox Code Playgroud)
所以,从本质上讲,使用上面的代码我想这样做:
ps = p.port_stocks.first #(`id=17`)
first = ps.volume * ps.purchase_price # 2000 * 5.9 = 11,800
ps = p.port_stocks.second #(`id=18`)
second = ps.volume * ps.purchase_price # 1000 * 9.0 = 9,000
first + second = 19,800
Run Code Online (Sandbox Code Playgroud)
我想简单地说19,800.理想情况下,我想以非常Ruby的方式做到这一点.
如果我只是简单地总结1中的所有值total_spend …
我试图用函数对数组中的数字求和:
def total(numbers)
numbers.each do |e|
total_number = e + total_number
return total_number
end
end
puts total([1,2,3,4])
Run Code Online (Sandbox Code Playgroud)
但我不断收到一条错误消息:
nil无法强制进入Fixnum(repl):18:在'+'
谁能看到我做错了什么?
each> do循环在函数之外工作.