我有以下定义的课程
runtime: custom
vm: true
entrypoint: bundle exec rackup -p 8080 -E production config.ru
resources:
cpu: 0.5
memory_gb: 1.3
disk_size_gb: 10
env_variables:
GCLOUD_STORAGE_BUCKET: site-1286.appspot.com
当我尝试拨打class Post
include ActiveModel::Serializers::JSON
attr_accessor :id,
:title,
:status,
:meta
def attributes
{ 'id' => nil, 'title' => nil, 'status' => nil, 'meta' => nil }
end
end
class PostMeta
include ActiveModel::Serializers::JSON
attr_accessor :id,
:key,
:value,
:description
def attributes
{ 'id' => nil, 'key' => nil, 'value' => nil }
end
end
时,它会提到错误。这是我如何设置数据
to_json
如果我未在post = Post.new
post.id = 1
post.title = 'test'
post.status = 0
meta = PostMeta.new
meta.id = 8
meta.key = 'cloud'
meta.value = 'wpengine'
post.meta = meta
post.to_json
中设置meta
,则不会出错。此外,如果我使用活动记录实例设置post
,它也可以正常工作。
有人可以提出我在上述课程中缺少的内容吗?
答案 0 :(得分:0)
我明白了。
PostMeta
为attribute_accessor
定义了description
,但attributes
方法返回的哈希值丢失了。
我也进行了一些重构,所以如果attributes
列表更改,我不必担心添加/删除attributes_accessor
哈希属性。
class Base
include ActiveModel::Serializers::JSON
def attributes
@attributes ||= Hash[self.class::ATTRIBUTES.map(&:to_s).zip]
end
end
class Post < Base
ATTRIBUTES = [:id, :title, :status, :meta]
attr_accessor *ATTRIBUTES
end
class PostMeta < Base
ATTRIBUTES = [:id, :key, :value, description]
attr_accessor *ATTRIBUTES
end