我得到了一个Book模式,而book有一个cover(由carrierwave使用)。然后我得到了另一个模型,它包含名为Good的书籍
因此,在控制器中,我需要先加载所有的book.coverl,以防止N+1查询。
以下是代码
#@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结果将如下所示
{
3 => "book_content_cover.jpg",
4 => "book_content_cover.jpg",
5 => nil,
6 => nil,
...但是,我希望封面由cover_identifier改为cover.url
像这样
{
1 => "http://...jpg",
2 => "http://...jpg"
3 => "http://...jpg"
}更新
我想通了
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有没有更好的方法?
发布于 2016-08-11 19:25:29
如果这样做,会出现什么?
all_book = BookContent.where(id: @course_goods[:contents_goods].map{|i,k| [i["book_content_id"], k]})发布于 2022-02-01 15:12:40
对于那些使用fog-aws的人,我是这样做的:
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)https://stackoverflow.com/questions/38892542
复制相似问题