21

Carrierwaveはデフォルトstore_dirで、アップローダーでによって生成されたURLを受け取り、railsアプリケーションのパブリックフォルダーへのパスを付加してファイルを保存します。

たとえば、

def store_dir
  "uploads/#{model.id}"
end

その後、ファイルはに保存されますpublic/uploads/:attachment_id

保存されたファイルをパブリックフォルダから移動しようとしても、パブリックフォルダに保存されます。パブリックフォルダの外にファイルを保存する方法を知っている人はいますか?

4

5 に答える 5

40

これを行う最もクリーンな方法は、CarrierWaveルートオプションを設定することです。

CarrierWave.configure do |config|
  config.root = Rails.root
end

その後、store_dirこのルート内で使用されます。

于 2011-08-09T14:57:47.180 に答える
12

これは実際には現在の質問ではないことはわかっていますが、何か他のものを探して見つけました。答えは、Rails.rootを使用することです。例:

  def store_dir
    "#{Rails.root}/private/files/#{model.id}"
  end
于 2011-06-22T14:38:40.390 に答える
8

よりクリーンな解決策は、次のように定義することです。

def store_dir
  nil
end

ドキュメントを参照してください

于 2014-03-28T07:28:13.203 に答える
0

ストアディレクトリ内では、次のようなこともできます。

 def store_dir
     "#{Rails.root.join('public', 'system', 'uploads')}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
 end

config_rootを変更するソリューションは私にはうまくいきませんでした。

于 2013-02-23T02:13:11.203 に答える
0

誰かがRSpecのためだけにそれを必要とするなら、それからただしてください

describe SomeClass do
  before do
    CarrierWave.stub(:root).
      and_return(Pathname.new "#{Rails.root}/tmp/fake_public")
  end

  it { ... }
end

すべてのテストでそれが必要な場合

# spec/spec_helper.rb
RSpec.configure do |config|
  # ...
  config.before :each do
    # ...
    CarrierWave.stub(:root).and_return(Pathname.new "#{Rails.root}/tmp/public")
  end
end
于 2014-03-10T09:48:42.787 に答える