Rails采取的获取carrierwave网址

时间:2016-08-11 09:34:55

标签: ruby-on-rails activerecord carrierwave

我有一个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

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

如果这样做了什么?

all_book = BookContent.where(id: @course_goods[:contents_goods].map{|i,k| [i["book_content_id"], k]})