Rails 活动存储 REST API
Rails Active Storage REST API
我已经能够设置 Active Storage
文件上传,现在我正在尝试 return 关联图像,例如 Speaker.all
或 Speaker.find(2)
.
调用相关的端点我得到类似的东西:
{
"id": 2,
"name": "Rafael",
"email": "rafael.almeida@mail-provider.com",
"company": "XING",
"social_media": "{\"twitter\": \"@rafaelcpalmeida\"}",
"created_at": "2018-10-01T17:21:50.993Z",
"updated_at": "2018-10-01T17:21:51.144Z"
}
我怎样才能return它的关联头像?
检查此方法是否适合您的需求。 has_one_attached
.
就是这种情况
首先,获取记录:
speaker = Speaker.find(2)
然后将其转换为Ruby散列(请注意.as_json
):
speaker_hash = speaker.as_json
现在,只需使用 url_for
帮助程序附加您需要的键值对:
speaker_hash['url'] = url_for(speaker.avatar)
最后,将哈希值转换为json:
speaker_hash.to_json
我想出了怎么做才能达到我想要的结果。首先,我们需要将 active_model_serializers
添加到 Gemfile
,然后是 bundle install
。
在我们安装 gem 之后,我们应该将 include ActionController::Serialization
添加到每个将要使用序列化程序的控制器。
我们使用 rails g serializer speaker
生成了一个新的序列化程序。我的 SpeakerSerializer
看起来像:
class SpeakerSerializer < ActiveModel::Serializer
attributes :id, :name, :email, :company, :avatar
def avatar
rails_blob_path(object.avatar, only_path: true) if object.avatar.attached?
end
end
我的输出看起来像
{
"speaker": {
"id": 2,
"name": "Rafael",
"email": "rafael.almeida@xing.com",
"company": "XING",
"avatar": "/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCdz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--515a0de8817b3529b5d3d168871cebf6ccee0463/xing-photo.jpg"
}
}
我已经能够设置 Active Storage
文件上传,现在我正在尝试 return 关联图像,例如 Speaker.all
或 Speaker.find(2)
.
调用相关的端点我得到类似的东西:
{
"id": 2,
"name": "Rafael",
"email": "rafael.almeida@mail-provider.com",
"company": "XING",
"social_media": "{\"twitter\": \"@rafaelcpalmeida\"}",
"created_at": "2018-10-01T17:21:50.993Z",
"updated_at": "2018-10-01T17:21:51.144Z"
}
我怎样才能return它的关联头像?
检查此方法是否适合您的需求。 has_one_attached
.
首先,获取记录:
speaker = Speaker.find(2)
然后将其转换为Ruby散列(请注意.as_json
):
speaker_hash = speaker.as_json
现在,只需使用 url_for
帮助程序附加您需要的键值对:
speaker_hash['url'] = url_for(speaker.avatar)
最后,将哈希值转换为json:
speaker_hash.to_json
我想出了怎么做才能达到我想要的结果。首先,我们需要将 active_model_serializers
添加到 Gemfile
,然后是 bundle install
。
在我们安装 gem 之后,我们应该将 include ActionController::Serialization
添加到每个将要使用序列化程序的控制器。
我们使用 rails g serializer speaker
生成了一个新的序列化程序。我的 SpeakerSerializer
看起来像:
class SpeakerSerializer < ActiveModel::Serializer
attributes :id, :name, :email, :company, :avatar
def avatar
rails_blob_path(object.avatar, only_path: true) if object.avatar.attached?
end
end
我的输出看起来像
{
"speaker": {
"id": 2,
"name": "Rafael",
"email": "rafael.almeida@xing.com",
"company": "XING",
"avatar": "/rails/active_storage/blobs/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBCdz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--515a0de8817b3529b5d3d168871cebf6ccee0463/xing-photo.jpg"
}
}