Saya menggunakan dropzone.js untuk mengunggah gambar.
Dalam file js coffeescript saya, saya memiliki pengaturan untuk dropzone:
Dropzone.autoDiscover = false
dropzone = new Dropzone('#item-form',
maxFiles: 1
maxFilesize: 1
paramName: 'item[image]'
headers: "X-CSRF-Token" : $('meta[name="csrf-token"]').attr('content')
addRemoveLinks: true
clickable: '#image-preview'
previewsContainer: '#image-preview'
thumbnailWidth: 200
thumbnailHeight: 200
parallelUploads: 100;
autoProcessQueue: false
uploadMultiple: false)
$('#item-submit').click (e) ->
e.preventDefault()
e.stopPropagation()
if dropzone.getQueuedFiles().length > 0
dropzone.processQueue()
else
$('#item-form').submit()
return
return
Selain opsi, klik tombol kirim di formulir saya, jika ada gambar, gambar akan diproses dan jika tidak ada gambar, tetap kirimkan formulir.
Berikutnya adalah pengontrol saya (kode yang relevan):
def create
@item = current_user.items.build(item_params)
respond_to do |format|
if @item.save
format.html { redirect_to @item, notice: 'Item was successfully created.' }
format.json { render :show, status: :created, location: @item }
else
format.html { render :new }
format.json { render json: @item.errors, status: :unprocessable_entity }
end
end
end
Dari formulir saya:
= form_for @item, html: {id: 'item-form', class: 'form', multipart: true} do |f|
= f.text_field :name, class: 'form-control'
%main#image-preview
Add a Photo
.fallback
= f.file_field :image, multiple: false
= f.submit 'Done', id: 'item-submit'
Jadi sekarang pengaturan ini semuanya berfungsi. Sebelum saya mendapat kesalahan Missing Template
karena saya perlu membuat templat show.json.erb
dan setelah saya melakukannya, saya mendapat ini di log:
Started POST "/items" for 127.0.0.1 at 2015-10-16 21:36:18 -0700
Processing by ItemsController#create as JSON
...................
(10.7ms) COMMIT
Item Store (142.4ms) {"id":12}
Rendered items/show.json.erb (0.4ms)
Completed 201 Created in 2759ms (Views: 6.1ms | Searchkick: 142.4ms | ActiveRecord: 11.9ms)
Jadi sekarang saya bertanya-tanya kapan menggunakan JSON atau hanya dalam skenario ini secara bersamaan, bagaimana cara mengalihkan ke halaman tampilan item jika terus memaksa saya untuk menggunakan JSON?
MEMPERBARUI
Saat mengubah respons saya saat item disimpan:
if @item.save
format.html { redirect_to @item }
format.json { redirect_to @item }
else
Ini melakukan ini:
Started GET "/items/13" for 127.0.0.1 at 2015-10-16 22:54:29 -0700
Processing by ItemsController#show as JSON
Parameters: {"id"=>"13"}
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 2]]
Item Load (0.4ms) SELECT "items".* FROM "items" WHERE "items"."id" = $1 LIMIT 1 [["id", 13]]
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 2]]
Rendered items/show.json.erb (0.7ms)
Completed 200 OK in 137ms (Views: 7.5ms | ActiveRecord: 25.2ms)
Jadi saya yakin bagaimana saya harus melakukan GET
permintaan sebagai HTML agar dapat berfungsi dengan benar?
PEMBARUAN 2
Saya melakukan hal berikut di bawah ini dan harus membuat file create.json.erb
juga.
if @item.save
format.html { redirect_to @item }
format.json { redirect_to item_path(@item, format: :html) } and return
else
Started POST "/items" for 127.0.0.1 at 2015-10-16 23:36:13 -0700
Processing by ItemsController#create as JSON............
(12.9ms) COMMIT
Item Store (426.1ms) {"id":18}
Rendered items/create.json.erb (19.6ms)
Completed 200 OK in 3892ms.....
Itu masih tidak mengarahkan saya memberi saya hasil yang sama seperti sebelumnya.
PEMBARUAN 3
Jadi melakukan format.json { redirect_to item_path(@item) and return}
tidak mengalihkan ke halaman pertunjukan tetapi memproses di JSON. Dan melakukan format.json { redirect_to item_path(@item, format: :html) and return}
menyisakan Started GET "/items/19.html
yang salah karena Anda tidak bisa mendapatkan halaman dengan .html
di akhir.
PEMBARUAN 3
Masih belum berhasil dengan variasi apa pun:
format.json {render :show, status: :created, location: item_url(@item, format: :html )}
Saya pikir saya harus mengalihkan dengan window.location
yang merupakan bagian dari JavaScript, di suatu tempat dalam kode saya tetapi perlu melakukan penelitian lebih lanjut. Saya tidak peduli apakah saya dapat menjalankannya dalam format js
atau html
selama masih berfungsi.
PEMBARUAN 4
Oke, jadi saya bisa mendapatkan perilaku yang sama dalam aplikasi pengujian baru di GitHub saya di sini: https://github.com/justintech/dropzonetest. Yang ini menampilkan Invalid JSON response from server.
Jadi saya kira aplikasi saya yang sebenarnya melakukan hal yang sama tetapi hanya mengalami gangguan dan lolos sebagai respons lengkap. aneh. Jangan ragu untuk memeriksanya.
JSON
) berhasil? - person illusionist   schedule 25.10.2015JSON
maka Anda dapat menghapus semua pernyataanformat.json {}
dan memastikan bahwa semua permintaan yang dapat dibuat klien ada dalam permintaanHTML
- person illusionist   schedule 26.10.2015else
berfungsi dengan gagal? - person Timmy Von Heiss   schedule 15.08.2016