Railsアプリでcarrierwaveを使用して条件付きバージョンを設定しようとしています。ここで提供されている例の正確な複製と思われるものを実装しました。
is_ipod?
私が単にを返さない限り、バージョンは決して作成されませんtrue
。以下のコードは私が現在持っているものであり、機能していません。image_type
属性が実際に正しく設定されていることを確認するために使用したコメント付きセクションに注意してください。
version :ipod_portrait_thumb, :if => :is_ipod? do
process resize_to_fit: [150,200]
end
def is_ipod? image
model.image_type == 'iPod Screenshot'
#if (model.image_type == "iPod Screenshot")
#if (model.image_type!=nil)
#puts "+++++"+model.image_type
# if (model.image_type=="iPod Screenshot")
#puts "+++++++ I AM HERE"
# return true
# end
#end
end
is_ipod?
このように見える場合:
def is_ipod? image
true
end
バージョンは期待どおりに作成されます。私は何が欠けていますか?ありがとう!
アップデート:
is_ipod?
メソッドを次のように編集しました。
def is_ipod? image
puts (image.path || "") + ': ' + ((model.image_type||"") == 'iPod Screenshot').to_s
model.image_type == 'iPod Screenshot'
end
これをコンソールに出力します。
/public/uploads/tmp/20130325-1024-15906-5363/drawing.png: false
/public/uploads/tmp/20130325-1024-15906-5363/drawing.png: false
/public/uploads/app_image/image/59/drawing.png: true
そのため、バージョンは3回作成され、一時ファイル用に2回、最終ファイル用に1回作成されます。model属性は、最終ファイルに対してのみ設定されます。これは関係がありますか?これがこの例とどのように違うのか誰か教えてもらえますか?
class MyUploader < CarrierWave::Uploader::Base
version :monkey, :if => :is_monkey?
protected
def is_monkey? picture
model.favorite_food == 'banana'
end
end
これが役立つ場合の私のモデルクラスです:
class AppImage < ActiveRecord::Base
attr_accessible :app_id, :image, :image_type, :image_cache
belongs_to :app
mount_uploader :image, AppImageUploader
validates :image_type, presence: true
validates :image, presence: true
end
ありがとう!