Saya mencoba mereplikasi sistem pemberitahuan push yang mirip dengan Facebook menggunakan private_pub. Idealnya saya ingin menautkan ini untuk menampilkan pemberitahuan menggunakan permata seperti gritter (saran permata lainnya dipersilakan )
Setiap kali tindakan tertentu dari pengontrol dipanggil, saya ingin mengirimkan pemberitahuan ke semua pelanggan yang merupakan bagian dari id tertentu. Selama Anda masuk, Anda berlangganan saluran tersebut, dicapai dengan menempatkan subscribe_to
di tata letak.
dalam tampilan:
<%= subscribe_to "/messages/#{@group_id}" %>
di pengontrol
PrivatePub.publish_to("/messages/#{@group_id}", "alert('test')")
ini berfungsi dengan baik, namun saya ingin mendapatkan sesuatu yang lebih canggih daripada alert
sebagai respons (seperti pemberitahuan yang lebih kasar), jadi sebagai gantinya:
PrivatePub.publish_to("/messages/#{@group_id}", data: @some_data)
Mengikuti tutorial, mereka menggunakan skrip kopi untuk ini. Namun, saya tidak dapat mengaktifkan peringatan sederhana (mungkin karena id di saluran)
Dalam ini pertanyaan, OP dapat menyelesaikannya menggunakan tampilan js.erb. Tapi saya tidak bisa membuatnya berfungsi.
penafian: pengetahuan js dan coffeescript saya hampir nol.
Bantuan apa pun dihargai :)
EDIT
Beberapa info lebih lanjut: Saya memiliki metode di pengontrol yang merupakan bagian dari API publik, dan mengharapkan permintaan POST. Jika semuanya baik-baik saja, respons sukses JSON akan dikirimkan. Selain itu, metode yang sama mengirimkan pemberitahuan ke semua pengguna grup tertentu.
Saya sebenarnya berhasil membuat ini berfungsi, menempatkan ini di pengontrol:
metode panggilan balik:
respond_to do |format|
format.js #-> calls callback.js.erb
#format.json { render json: {"success" => true}.to_json }
end
dan memasukkan barang-barang yang lebih kasar ke dalam my_api_controller/callback.js.erb
:
<% publish_to "/messages/#{@group_id}" do %>
<%= add_gritter(
"Nova " + link_to("reserva", reservation_path(@r)) + " de #{@channel} para " +
link_to(@hostel_name, hostel_path(@hostel_id)),
:title => "Nova reserva!",
:sticky => true,
:image => :notice
) %>
<% end %>
catatan: karena langganan saluran dilakukan di setiap tampilan (melalui tata letak), Anda dapat menerima pemberitahuan di halaman/tampilan mana pun
Masalah saya saat ini adalah, seperti yang bisa Anda tebak, respons JSON. Karena saya tidak dapat merender dua respons, hanya js.erb yang dipanggil, tetapi respons JSON tidak pernah terkirim