首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails pluck carrierwave url

Rails pluck carrierwave url
EN

Stack Overflow用户
提问于 2016-08-11 17:34:55
回答 2查看 246关注 0票数 0

我得到了一个Book模式,而book有一个cover(由carrierwave使用)。然后我得到了另一个模型,它包含名为Good的书籍

因此,在控制器中,我需要先加载所有的book.coverl,以防止N+1查询。

以下是代码

代码语言:javascript
复制
#@course_goods contain a lots of column, include BookContent.id, too
all_book = BookContent.where(id: @course_goods[:contents_goods].map{|i| i["book_content_id"]}).pluck_all(:id,:cover).map{|b| [b["id"], b["cover"]]}.to_h

结果将如下所示

代码语言:javascript
复制
{
     3 => "book_content_cover.jpg",
     4 => "book_content_cover.jpg",
     5 => nil,
     6 => nil,
     ...

但是,我希望封面由cover_identifier改为cover.url

像这样

代码语言:javascript
复制
{
    1 => "http://...jpg",
    2 => "http://...jpg"
    3 => "http://...jpg"
}

更新

我想通了

代码语言:javascript
复制
all_book = BookContent.where(id: @course_goods[:contents_goods].map{|i| [i["book_content_id"]]})
a_hash ={}
all_book.each do |i|
 a_hash[i[:id]] = i.cover.url
end

有没有更好的方法?

EN

回答 2

Stack Overflow用户

发布于 2016-08-11 19:25:29

如果这样做,会出现什么?

代码语言:javascript
复制
all_book = BookContent.where(id: @course_goods[:contents_goods].map{|i,k| [i["book_content_id"], k]})
票数 0
EN

Stack Overflow用户

发布于 2022-02-01 15:12:40

对于那些使用fog-aws的人,我是这样做的:

代码语言:javascript
复制
s3 = Fog::Storage.new(
  provider: 'AWS', region: ENV['S3_REGION'],
  aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'], aws_secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
)
directory = s3.directories.new(key: ENV['S3_BUCKET'])
path = directory.files.new(
  key: "your/key.jpg"
).url(Time.now + 1000)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38892542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档