質問編集履歴

2

コードの追記

2019/11/14 05:38

投稿

nanase21
nanase21

スコア144

test CHANGED
File without changes
test CHANGED
@@ -223,3 +223,23 @@
223
223
  end
224
224
 
225
225
  ```
226
+
227
+
228
+
229
+
230
+
231
+ 更新をバックエンドで待ち続ける時
232
+
233
+ ```ruby
234
+
235
+ #dmは取得したレコード
236
+
237
+ loop do
238
+
239
+ break if dm.present?
240
+
241
+ sleep 0.1
242
+
243
+ end
244
+
245
+ ```

1

コードの追記

2019/11/14 05:38

投稿

nanase21
nanase21

スコア144

test CHANGED
File without changes
test CHANGED
@@ -121,3 +121,105 @@
121
121
  特にバックエンド側の、メッセージを受け取るまで閉じずに待つという処理が分からないです。(概念は理解できているのですがコードの書き方が分からないです。)
122
122
 
123
123
  そのため、バックエンド側のコードを交えてご教示いただけると幸いです。
124
+
125
+
126
+
127
+
128
+
129
+ **試したこと**
130
+
131
+ 動かないですが、私の中でイメージしているロングポーリングの処理です。
132
+
133
+
134
+
135
+ ```ruby
136
+
137
+ class DmController < ApplicationController
138
+
139
+
140
+
141
+ def ajax
142
+
143
+ # {message {cnt:9}} パラメーターです。cntはviewに表示されているメッセージの数です。
144
+
145
+ # 例)DBにはメッセージが10こあるとします。
146
+
147
+ dm = Dm.all
148
+
149
+ num = dm.count - params[:message][:cnt].to_i
150
+
151
+ # => 1
152
+
153
+ dm.last(num)
154
+
155
+ respond_to do |format|
156
+
157
+ if dm.present?
158
+
159
+ format.js
160
+
161
+ format.json { render json: dm }
162
+
163
+ else
164
+
165
+ wait
166
+
167
+ end
168
+
169
+ end
170
+
171
+ end
172
+
173
+
174
+
175
+ def wait dm = nil
176
+
177
+ sleep(60) if dm.blank? # sleepをkillしてjsonを返す
178
+
179
+ respond_to do |format|
180
+
181
+ format.js
182
+
183
+ format.json { render json: dm }
184
+
185
+ end
186
+
187
+ end
188
+
189
+
190
+
191
+ def create
192
+
193
+ dm = Dm.new(params)
194
+
195
+ respond_to do |format|
196
+
197
+ if dm.save
198
+
199
+ wait(dm)
200
+
201
+ else
202
+
203
+ redirect_to root_path
204
+
205
+ end
206
+
207
+ end
208
+
209
+ end
210
+
211
+
212
+
213
+ private
214
+
215
+
216
+
217
+ def params
218
+
219
+ params.require(:message).permit(:dm).merge(user_info: current_user)
220
+
221
+ end
222
+
223
+ end
224
+
225
+ ```