如何使用Ruby Grape Entity自定义属性格式?

时间:2016-06-07 12:16:21

标签: ruby grape grape-entity

我的模型中有一个属性价格,目前它正在以科学计数法格式化,我宁愿以十进制表示法显示。

ruby-grape建议使用以下代码自定义字段格式:

class ExampleEntity < Grape::Entity
  expose :formatted_value
  # ...
private

  def formatted_value
    "+ X #{object.value}"
  end
end

但是,我注意到,即对象的属性,在此范围内不可用。这是#{object.methods}的输出:

[
{
"price": "0.12E3",
"formatted_value": "+ X [:rehash, :to_hash, :to_h, :to_a, :inspect, :to_s,    :==, :[], :hash, :eql?, :fetch, :[]=, :store, :default, :default=,     :default_proc, :default_proc=, :key, :index, :size, :length, :empty?,     :each_value, :each_key, :each_pair, :each, :keys, :values, :values_at,  :shift, :delete, :delete_if, :keep_if, :select, :select!, :reject, :reject!,  :clear, :invert, :update, :replace, :merge!, :merge, :assoc, :rassoc,  :flatten, :include?, :member?, :has_key?, :has_value?, :key?, :value?,  :compare_by_identity, :compare_by_identity?, :any?, :transform_keys,  :transform_keys!, :stringify_keys, :stringify_keys!, :symbolize_keys,  :to_options, :symbolize_keys!, :to_options!, :assert_valid_keys,  :deep_transform_keys, :deep_transform_keys!, :deep_stringify_keys,  :deep_stringify_keys!, :deep_symbolize_keys, :deep_symbolize_keys!,  :reverse_merge, :reverse_merge!, :reverse_update, :with_indifferent_access,  :nested_under_indifferent_access, :blank?, :extractable_options?,  :deep_merge, :deep_merge!, :except, :except!, :slice, :slice!, :extract!,  :to_query, :to_param, :to_xml, :to_json, :entries, :sort, :sort_by, :grep,  :count, :find, :detect, :find_index, :find_all, :collect, :map, :flat_map,  :collect_concat, :inject, :reduce, :partition, :group_by, :first, :all?,  :one?, :none?, :min, :max, :minmax, :min_by, :max_by, :minmax_by,  :each_with_index, :reverse_each, :each_entry, :each_slice, :each_cons,  :each_with_object, :zip, :take, :take_while, :drop, :drop_while, :cycle,  :chunk, :slice_before, :slice_after, :slice_when, :lazy, :to_set, :present?,  :presence, :acts_like?, :try, :try!, :psych_to_yaml, :to_yaml,  :to_yaml_properties, :nil?, :===, :=~, :!~, :<=>, :class, :singleton_class,  :clone, :dup, :itself, :taint, :tainted?, :untaint, :untrust, :untrusted?,  :trust, :freeze, :frozen?, :methods, :singleton_methods, :protected_methods,  :private_methods, :public_methods, :instance_variables,  :instance_variable_get, :instance_variable_set, :instance_variable_defined?,  :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :send,  :public_send, :respond_to?, :extend, :display, :method, :public_method,  :singleton_method, :define_singleton_method, :object_id, :to_enum, :enum_for,  :class_eval, :silence_warnings, :enable_warnings, :with_warnings,  :silence_stderr, :silence_stream, :suppress, :capture, :silence, :quietly,  :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__, :__id__]"   
}
]

所以下面的代码抛出了我{&#34;错误&#34;:&#34;未定义的方法`价格&#39;对于哈希:0x0055a87576f660&#34; }

def formatted_price
 "#{object.price}"
end

1 个答案:

答案 0 :(得分:0)

正如异常所说,暴露的对象是哈希。因此,可以使用对象[:value]而不是object.value找到它的属性,如下所示

        private
          def formatted_price
            "%f" % "#{object[:price]}"
          end
        end