我有一个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.url
而不是cover_identifier
喜欢这个
{
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
有更好的方法吗?
答案 0 :(得分:0)
如果这样做了什么?
all_book = BookContent.where(id: @course_goods[:contents_goods].map{|i,k| [i["book_content_id"], k]})