CarrierWave current_path的NoMethodError

时间:2017-05-18 00:24:07

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-5 carrierwave

我无法在自定义类中调用CarrierWave current_path。

NoMethodError: private method `try' called for #<CarrierWave::SanitizedFile:0x007fadf259fbf8>



def send_letter(letter)
   data = {}
   data[:attachment]   = File.new("#{letter.template.attachment.current_path}", 'rb')
end

发生在letter.template.attachment.current_path调用中,我不明白为什么。在rails控制台中,相同的命令工作得很好......但是当我尝试使用rake任务运行它时,它会因NoMethodError(上面)而失败。如何获取文件的路径而不是current_path(如果是使用CarrierWave上传的话)。感谢你的时间!

UPDATE 谢谢你的回答。 letter.template.present? - 真的

letter.template.attachment.present? -true

letter.template.attachment.methods.respond_to?(:current_path) - false

但是letter.template.attachment.methods(有:current_path)

:cache!,:cache_name,:retrieve_from_cache!,:cache_stored_file!,:sanitized_file,:model,:mounted_as,:to_s,:length,:size,:path,:read,:content_type,:identifier,:blank ?,:current_path

1 个答案:

答案 0 :(得分:0)

NoMethodError意味着,没有attachment#current_path

letter.template.present?letter.template.attachment.present?,是letter.template.attachment.methods.respond_to?(:current_path)

点击letter.template.attachment,了解letter.template.attachment.methods可用的方法。

看起来CarrierWave也会覆盖try - send_letter的跟踪是什么样的?