私はthis tutorialに続いて、Paperclipを自分のRails 3アプリケーションに統合しようとしています。Rails 3とPaperclipの問題 - アップロードされたファイルをファイルシステムに保存するには?
しかし、私の場合はこのチュートリアルで説明されているものとは少し違って見えます。
私の場合、User
モデルはすでにデータベースに存在しており、ファイルをアップロードしてアップローダに関連付ける必要があります。
class User < ActiveRecord::Base
has_many :assets, :foreign_key => "uploader_id"
end
class Asset < ActiveRecord::Base
belongs_to :uploader, :class_name => "User"
has_attached_file :asset, :styles => { :thumb => "100x100#" }
end
私の場合とチュートリアルの主な違いは、アップロード入力フィールドがUser
のフォーム内ではないということである:
# views/lounge/index.html.erb
<%= form_tag('/lounge/upload', :multipart => true) do %>
<input id="uploader_id" name="uploader_id" type="hidden" />
<%= file_field_tag "assets[]", :multiple => true %>
<% end %>
ここ
は、自分のコードの関連部分であります隠されたuploader_id
入力フィールドの値はJavascriptによって制御されます。
フォームが送信されるとupload
メソッドが呼び出されます。
class LoungeController < ApplicationController
def upload
uploader = User.find(params[:uploader_id])
# ??
end
end
は私がファイルシステムにアップロードされたファイルを保存して、データベースに対応するAsset
モデルを作成するために、params[:assets]
で何をすべき?
お返事ありがとうございます!それは本当に私を助けました!私はファイルをアップロードしようとしているユーザーが誰であるかを事前に知っていないので、(チュートリアルで提案されているように)ユーザーのフォームでこれを実装することはできません。私は知っている、それは奇妙に聞こえるが、これはケースです:)いくつかの質問:**(1)** 'N'ファイルがアップロードされる場合は、' N '回を呼び出すのではなく、 「保存する」? **(2)**(ばかげた質問) 'user.assets.new'が何をしているか詳しく説明できますか? 'user.assets'は' Array'です。だからあなたは 'Array'で' new'を呼び出しますか?ところで、それは魅力のように動作します:) –
1)あなたは資産を省略することができるかもしれません。行を保存し、最後にuser.saveを呼び出す - 私はチェックなしではわからない。それを試してみてください! –
2)user.assetsは配列ではありません。配列を返すhas_manyアソシエーションによって作成されるメソッドです。 user.assets.newは、user_idが設定された新しいAssetオブジェクトを返す別のメソッドです。他のメソッドもあります:user.assets <<(asset)は新しいオブジェクトを割り当て、user.assets.sizeは関連オブジェクトの数のカウントを返します。完全なリストについては、http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_manyを参照してください。 –