質問

、tmpファイルを作り、その中に文字列を入れて、それを再度開き、添付ファイルとして保存するなどPaperlip経由で添付ファイルとして、いくつかの文字列を保存するためのより良い方法はありますか?

このよう

  def save_string data
    tmp_file = "/some/path"
    File.open(tmp_file,'w') do |f|
      f.write(data)
    end

    File.open(tmp_file,'r') do |f|
      ceneo_xml = f
      save!
    end
  end
役に立ちましたか?

解決

ペーパークリップストアはをファイルのあなたのモデルと一緒に - 。これは、何を書かれているものであるので、私は短い答えは「ノー」だと思います。

あなたはペーパークリップのソースでattachment.rbを見ると

あなたはdef assign uploaded_fileと呼ばれる方法が表示されます。あなたはこのメソッドの実装を見れば、あなたはそれの上に定義された特定のメソッドを持つようにアップロードされたファイルオブジェクトを期待していることがわかります。

あなたはペーパークリップが期待するのと同じインタフェースを踏襲し、独自のクラスを作成することができますが、ファイルを保存し、ペーパークリップにおそらく最も簡単な方法であることを割り当てるのソリューション正直に言うと。

他のヒント

より良い方法は実際にあります - あなたはペーパークリップが強化され、あなたが時間がないの擬似アップロードされたファイルを取得しますこれはStringIOにそれをラップすることができます。あなたは、インスタンスメソッドを定義することによって、それをカスタマイズしたり、直接

このようにStringIOのサブクラスを作成することができます
class InvoiceAttachment < StringIO
 def initialize(invoice, content)
   @invoice = invoice
   super(content)
 end

 def original_filename
   from = @invoice.from
   to = @invoice.to
   date = @invoice.created_at.strftime('%B-%Y').downcase 
   "invoice_#{date}_from_#{from}_to_#{to}.pdf"
 end

 def content_type
   'application/pdf'
 end
end

お楽しみください!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top