Rails 3.2.14 の初心者、Heroku でのテスト、s3_direct_upload gem を使用した S3 への画像ファイルのアップロード。
私は宝石をうまく動かしています。ドラッグ アンド ドロップ、プログレス バー、S3 への直接アップロードがうまく機能します。アップロードは Attachment モデルに関連付けられています。アップロード時に新しいレコードが適切に作成されます。ここまでは順調です。
私が抱えている問題はparent_id
、新しいレコードのフィールドを設定したいのですが、それを渡す方法がわからないことです。gem は従来のフォームを使用してアップロードを送信するのではなく、javascript を介して処理されます。
<%= s3_uploader_form callback_url: attachments_url, callback_param:
"attachment[attachment_url]", id: "myS3Uploader" do %>
<%= file_field_tag :file, multiple: true %>
<% end %>
の作成アクションattachments_controller.rb
:
def create
@attachment = Attachment.create(params[:attachment])
end
JavaScript ビューを呼び出しますcreate.js.erb
:
<% if @attachment.new_record? %>
alert("Failed to upload attachment: <%= j @attachment.errors.full_messages.join(', ').html_safe %>");
<% else %>
$("#attachments").prepend("<%= j render(@attachment) %>");
<% end %>
レコードの保存が機能したかどうかを確認し、新しいアップロード サムネイルを現在のビューに追加します。
通常のフォームやアクションを扱っていないのでcreate
、少し困惑しています。
以下を使用して、Attachment モデルにデフォルト値を設定できますbefore_save
。
before_save :set_defaults
def set_defaults
self.name = "Photo"
self.parent_id = 1
end
ただし、parent_id
親オブジェクト (つまり、ブログ投稿) の作成中に、アップロードが行われるページで定義されます。
has_many
andを使用する必要があることはわかっbelongs_to
ていますが、それらはセットアップされて正常に動作していますが、従来のフォームを使用してデータを送信していないため、parent_id を割り当てる方法がわかりません。
フォームを渡しparent_id
てモデルでアクセスしようとしました:
<%= s3_uploader_form callback_url: attachments_url(:parent_id => 99), callback_param:
"attachment[attachment_url]", id: "myS3Uploader" do %>
それはうまくいきませんでしたが、とにかくモデル内のパラメータにアクセスすることは想定されていません。
この点を乗り越えるための助けをいただければ幸いです。