ฉันกำลังพยายามจำลองระบบการแจ้งเตือนแบบพุชที่คล้ายกับของ Facebook โดยใช้ private_pub ตามหลักการแล้ว ฉันอยากจะเชื่อมโยงสิ่งนี้เพื่อแสดงการแจ้งเตือนโดยใช้อัญมณี เช่น gritter (ยินดีรับคำแนะนำอัญมณีอื่นๆ )
เมื่อใดก็ตามที่มีการเรียกการกระทำบางอย่างจากคอนโทรลเลอร์ ฉันต้องการส่งการแจ้งเตือนไปยังสมาชิกทุกคนที่เป็นส่วนหนึ่งของรหัสเฉพาะ ตราบใดที่คุณเข้าสู่ระบบ แสดงว่าคุณสมัครรับข้อมูลจากช่อง ซึ่งทำได้โดยการใส่ subscribe_to
ลงในเลย์เอาต์
ในมุมมอง:
<%= subscribe_to "/messages/#{@group_id}" %>
ในตัวควบคุม
PrivatePub.publish_to("/messages/#{@group_id}", "alert('test')")
มันใช้งานได้ดี แต่ฉันอยากได้สิ่งที่ซับซ้อนกว่าการตอบกลับ alert
(เช่น การแจ้งเตือนที่น่าเศร้า) ดังนั้น:
PrivatePub.publish_to("/messages/#{@group_id}", data: @some_data)
ตามบทแนะนำ พวกเขาใช้ coffeescript สำหรับสิ่งนี้ อย่างไรก็ตาม ฉันไม่สามารถรับการแจ้งเตือนแบบธรรมดาได้ (อาจเป็นเพราะรหัสในช่อง)
ใน สิ่งนี้ คำถาม OP สามารถแก้ไขปัญหานี้ได้โดยใช้มุมมอง js.erb แต่ฉันไม่สามารถทำงานได้
ข้อจำกัดความรับผิดชอบ: ความรู้ js และ coffeescript ของฉันเกือบจะเป็นศูนย์
ความช่วยเหลือใด ๆ ที่ชื่นชม :)
แก้ไข
ข้อมูลเพิ่มเติม: ฉันมีวิธีการในตัวควบคุมที่เป็นส่วนหนึ่งของ API สาธารณะ และคาดว่าจะมีคำขอ POST หากทุกอย่างเรียบร้อยดี ระบบจะส่งการตอบกลับความสำเร็จของ JSON นอกเหนือจากนี้ วิธีการเดียวกันนี้ยังส่งการแจ้งเตือนไปยังผู้ใช้ทั้งหมดในกลุ่มใดกลุ่มหนึ่งด้วย
ฉันจัดการเพื่อให้สิ่งนี้ใช้งานได้จริงโดยวางสิ่งนี้ไว้ในคอนโทรลเลอร์:
วิธีการโทรกลับ:
respond_to do |format|
format.js #-> calls callback.js.erb
#format.json { render json: {"success" => true}.to_json }
end
และใส่สิ่งที่น่ากลัวลงใน 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 %>
หมายเหตุ: เนื่องจากการสมัครสมาชิกช่องเสร็จสิ้นในทุกการดู (ผ่านเลย์เอาต์) คุณสามารถรับการแจ้งเตือนบนหน้า/มุมมองใดก็ได้
ปัญหาของฉันในขณะนี้คืออย่างที่คุณเดาได้ การตอบสนองของ JSON เนื่องจากฉันไม่สามารถตอบกลับได้สองครั้ง จึงเรียกเฉพาะ js.erb เท่านั้น แต่การตอบกลับ JSON จะไม่ถูกส่งไป