这是我的代码:

class Order < Grape::Entity
  expose :id { |order, options| order.id.obfuscate }
  expose :time_left_to_review do |order, options|
    byebug
    order&.time_left_to_review # ERROR
  end
  expose :created_at { |order, options| order.last_transition.created_at }
end

# NoMethodError Exception: undefined method `time_left_to_review' for #<Order:0x007f83b9efc970>

我以为&..try的捷径,但我想我错了.有没有人能为我指明正确的方向?

我觉得这和ruby无关.也许是葡萄?虽然我不明白这是怎么回事.

推荐答案

&.就像#try!,而不是#try.

下面是对#try!的描述(从documentation开始):

与#try相同,但如果接收不是nil且未实现try方法,则将引发NoMethodError异常.

所以基本上它可以避免你在nil上调用一个方法,但是如果出现一个对象,它会像往常一样try 调用它的方法.

这段引文来自Rails文档,因此强调这一点很重要

Ruby-on-rails相关问答推荐

我如何在不在 gemfile 中的 rake 任务中要求 gem?

升级到 Rails 6.1.6.1 导致 Psych::DisallowedClass: 试图加载未指定的类:符号

Ruby on rails 查询不知道怎么写

Devise + Omniauth - 如何传递额外的参数?

禁用冻结字符串文字注释判断

有没有办法在模型而不是视图中使用复数()?

在一行中更改多个对象属性

基于 2 列定义唯一主键

Rails 3 中的动态错误页面

如何避免 has_many :through 关系中的重复?

控制器规格与请求规格?

是否可以在 Rails 集成测试或规范中指定用户代理?

警告:引用了顶级常量

如何将变量 link_to 定义为外部 URL

如何在 ROR (Ruby) 中显示 PDF?

非持久 ActiveRecord 模型属性

是否可以设置 travis 来运行多种语言的测试?

未捕获的 ReferenceError:未定义 ReactDOM

没有UTC的Rails 3默认日期时间格式

如何获取 Rails 3.1 中assets资源 的绝对 URL?