2017-04-17 25 views
0

我有一個廁所和照片模型和照片有一個多態關聯。 我有一個從csv文件收集信息的rake任務。我想更新圖片,但因爲它不是廁所桌子的一部分,所以我很難解決這個問題。我用回形針處理我的圖像。如何更新rake任務中的多態圖像?

我的任務是這樣的

namespace :import do 
    desc "Importing toilets from csv" 
    task toilets: :environment do 
    filename = File.join Rails.root, "toilets.csv" 
    counter = 0 
    CSV.foreach(filename, headers: true) do |row| 
    toilet = Toilet.create(
    name:  row['name'], 
    latitude:  row['latitude'], 
    longitude: row['longitude'], 
    address: row['address'], 
    image:  row['image'] 
    ) 
    puts "#{toilet} - #{toilet.errors.full_messages.join(",")}" if toilet.errors.any? 
    counter += 1 if toilet.persisted? 
    end 
    puts "Imported #{counter} toilets" 
end 
end 

空調型號

has_many :photos, :as => :imageable 
accepts_nested_attributes_for :photos 

照片模式

belongs_to :toilet 
belongs_to :imageable, :polymorphic => true 

has_attached_file :image, styles: { medium: "300x300>", thumb: "100x100>" } 
validates_attachment_content_type :image, content_type: /\Aimage\/.*\z/ 

回答

0

我想出如何更新與下面的代碼的圖像。這工作,但我覺得可能有一個更乾淨的解決方案。

toilet = Toilet.create(
    name:  row['name'], 
    latitude:  row['latitude'], 
    longitude: row['longitude'], 
    address: row['address'] 
) 


photo = Photo.create(
    image: row["image"], 
    imageable_type: "Toilet", 
    imageable_id: toilet.id 
)