【问题标题】:Need ruby error message as instance variable需要 ruby​​ 错误消息作为实例变量
【发布时间】:2013-05-02 09:15:41
【问题描述】:

我有一个这样的自定义错误类:

class EntityCrudError < StandardError
    attr_reader :action
    attr_reader :modelName
    attr_reader :entity
    attr_reader :errors
    def initialize(action, model, entity = nil)
      @action = action
      @model = model
      @entity = entity
      @errors = entity.respond_to?(:errors) ? entity.errors : nil
    end
end

我在 Sinatra Web 应用程序中使用它。发生错误时,我以 JSON 格式发送此对象的一个​​实例:

myError.to_json

这个to_json 方法是ActiveSupport implementation

但是,消息不在 JSON 对象中,因为它不是实例变量。我的 JSON 对象中需要该消息。我有两个想法可以做到这一点,但它们都不起作用......

  1. 将消息设为initialize 中的实例变量,但那里似乎还不存在。
  2. 合并消息到 JSON 对象中,但我不知道如何合并它。

哪一个是最好的,我该如何实施?

【问题讨论】:

  • 缺少的属性叫什么? myError.message?
  • @MatthewGraves 是的,但.message 是一个返回它的函数。这就是错误在 Ruby 中的工作方式。
  • 感谢您的红宝石课程。

标签: ruby json exception sinatra


【解决方案1】:

我只是想到了一些可行的方法:

class EntityCrudError < StandardError
  ..
  ..

  def to_json
    @message = self.message
    super
  end
end

所以当我需要对类进行 JSON 化时,我只需要创建一个实例变量,然后让super 实现完成剩下的工作。

【讨论】:

    猜你喜欢
    • 2021-07-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 2020-10-01
    • 2014-09-21
    • 1970-01-01
    • 2012-06-17
    相关资源
    最近更新 更多