0
「保存」ボタンをクリックすると、2つのエントリが作成されます。 1つは:マップ情報が格納され、もう1つは欠落していて、どちらも同じ:nameです。保存する完全なエントリだけを取得するにはどうすればよいですか?DBへのダブルフォーム提出の原因となるDropzone
new.html.erb
<%=form_for [@location, @floor], html: {class: "dropzone", multipart: true, id: "map-upload"} do |f|%>
<div>
<%=f.label :name%>
<%=f.text_field :name%>
</div>
<div class="fallback">
<%=f.label :map%>
<%=f.file_field :map%>
</div>
<%=f.submit "Save", id: "floor-submit"%>
<%end%>
ドラッグdrop.js
$(document).ready(function() {
// disable auto discover
Dropzone.autoDiscover = false;
var mapUpload = new Dropzone("#map-upload", {
paramName: "floor[map]",
autoProcessQueue: false,
maxFiles: 1,
addRemoveLinks: false,
dictDefaultMessage: 'Drag & drop a map image file here, or click here to select file to upload',
});
$('#map-upload').submit(function(e){
mapUpload.processQueue();
});
});
floor_controllerの関連部分:
def create
@floor = current_user.company.locations.find(params[:location_id]).floors.create(floor_params)
if @floor.save
flash[:notice] = "Floor has been created."
redirect_to location_floors_path
else
flash[:alert] = "There was an error saving the floor, please try again"
render 'new'
end
end
モデル
class Floor < ActiveRecord::Base
belongs_to :location
has_attached_file :map
validates_attachment_content_type :map, :content_type => /\Aimage\/.*\Z/
end
私は同意します。私が.preventDefault()フォームを送信した場合、私はインデックスにリダイレクトできません。 .processQueue()をキャンセルすると、イメージはアップロードされません。そこに私のジレンマがあります。 –
私はあなたがまだあなたのjからのインデックスアクションへのリダイレクトを追加するだけでフォームのデフォルトを防止すると思います。例えばlocation.href =/processqueueの後のインデックス。 –
申し訳ありませんが、私は自分のレールコントローラのインデックスメソッドへのリダイレクトを意味しました。ユーザーアカウントのparamが必要なので、jQueryを使って単純なリダイレクトを行うことはできません。 –