0

fixture_file_upload搬送波を使用して実装されているフィールドの工場で使用しています。だから、私は次のものを持っています:

モデル:

class Job < ActiveRecord::base
  mount_uploader :translated_xliff, XliffUploader
end

工場:

FactoryGirl.define do
  factory :job do
    translated_xliff { fixture_file_upload(
                           Rails.root.join(*%w[spec fixtures text.xliff])) }
   end
end

これで問題なく動作しましたが、今はジョブ コントローラーにアクションを追加して、ユーザーがこのファイルをダウンロードできるようにしています。このために、次のアクションがあります。

class JobsController < ApplicationController
  def xliff
    job = Job.find(params[:id])
    send_file(job.translated_xliff.path, disposition: 'attachment')
  end
end

send_fileしかし、これは次の行で例外を発生させます。

Exception: no implicit conversion of nil into String

を使用して、とのbyebug両方がであることがわかったので、工場の女の子がファイルの追加に失敗していると思います。pathfilenil

Rails 3.2 と Ruby 2.0 を使用しています。私は何を間違っていますか?path メソッドをモックするか、別の方法でファイルをアップロードする必要がありますか?

4

2 に答える 2

1

問題は、ファイル名が間違っていることです。そうではなくtext、そうですtest。理由はわかりませんが、工場の女の子は通常のようにエラーをスローしませんでしたが、これは私の質問の範囲外です。

于 2013-08-12T16:17:30.490 に答える
1

以下を使用すると役立ちますか?

job.translated_xliff.file.path

それが失敗した場合、ファクトリで Rack::Test:UploadedFile.new を使用するとどうなりますか:

FactoryGirl.define do
  factory :job do
    translated_xliff { Rack::Test::UploadedFile.new(File.open(Rails.root.join('spec', 'fixtures', 'text.xliff')), 'application/x-xliff+xml') }
  end
end
于 2013-08-12T15:39:04.570 に答える