質問編集履歴

3

解決時のコードを追記

2019/02/04 23:40

投稿

knyk
knyk

スコア17

test CHANGED
File without changes
test CHANGED
@@ -257,3 +257,151 @@
257
257
  ruby 2.4.1
258
258
 
259
259
  rails 5.0.4
260
+
261
+
262
+
263
+ ###最終的にどのように実装したか
264
+
265
+
266
+
267
+ 回答欄でいただいたグローバル変数を使うというやり方で進めました。
268
+
269
+
270
+
271
+ 途中うまくいかなかったのは,コントローラとjsの間でグローバル変数を受け渡せるrailsのgonというgemを使っていたのですが,ajaxで使うコントローラではどうやら変数の設定ができないようでした。
272
+
273
+ (console.logで確認すると,undefinedになってしまっていた)
274
+
275
+
276
+
277
+ 改めてコードを見直してみると,refresh_part.js.erbではjsのコードとrubyのコードの両方を使うことができるので,そこで変数の受け渡しを実現できることがわかりました。
278
+
279
+
280
+
281
+ 最終的に自分の目的を果たしたコードは以下のとおりです。
282
+
283
+ 実際にはチャットそのものではなく,updateされたものが追加されると意図とは異なる挙動になるので,修正日時ではなくidを基準に新しいものがないかのチェックを行う仕様にしています。
284
+
285
+
286
+
287
+
288
+
289
+ コントローラ(businessnotes_controller.rb)
290
+
291
+ ```
292
+
293
+ def index
294
+
295
+ (略)
296
+
297
+ gon.businessnote_id = @businessnotes.order('updated_at DESC').first.id
298
+
299
+ end
300
+
301
+
302
+
303
+
304
+
305
+ def refresh_part
306
+
307
+ @legalcase = Legalcase.find(params[:legalcase_id])
308
+
309
+ @businessnotes = @legalcase.businessnotes.order('created_at DESC')
310
+
311
+ @businessnote_refreshed = @businessnotes.order('updated_at DESC').first.id
312
+
313
+ respond_to do |format|
314
+
315
+ format.js {
316
+
317
+ @new_businessnotes = @businessnotes.where('id > ?', params[:new_businessnotes][:id])
318
+
319
+ }
320
+
321
+ end
322
+
323
+ end
324
+
325
+ ```
326
+
327
+
328
+
329
+ index.html.erb
330
+
331
+ ```
332
+
333
+ <script>
334
+
335
+
336
+
337
+ $(function(){
338
+
339
+ $(function(){
340
+
341
+ if($('.update_businessnote')[0]){
342
+
343
+ update_businessnote_id = gon.businessnote_id;
344
+
345
+ var timer = setInterval(update, 10000);
346
+
347
+ //10000ミリ秒ごとにupdateという関数を実行する
348
+
349
+ } else {
350
+
351
+
352
+
353
+ }
354
+
355
+ });
356
+
357
+ function update(){ //この関数では以下のことを行う
358
+
359
+ if($('.update_businessnote')[0]){
360
+
361
+ $.ajax({ //ajax通信で以下のことを行う
362
+
363
+ url: "businessnotes_controller/refresh_part",
364
+
365
+ data: { //railsに引き渡すデータは
366
+
367
+ new_businessnotes: { id:update_businessnote_id }
368
+
369
+ },
370
+
371
+ });
372
+
373
+ } else { //ない場合は
374
+
375
+
376
+
377
+ }
378
+
379
+ }
380
+
381
+ });
382
+
383
+
384
+
385
+ </script>
386
+
387
+ ```
388
+
389
+
390
+
391
+ refresh_part.js.erb
392
+
393
+ ```
394
+
395
+ <% if @new_businessnotes.present? %>
396
+
397
+ <% @new_businessnotes.each do |new_businessnote| %>
398
+
399
+ update_businessnote_id = "<%=@businessnote_refreshed%>"
400
+
401
+ $('.update_businessnote').eq(0).prepend('<%=escape_javascript(render 'update_businessnote',businessnote:new_businessnote) %>');
402
+
403
+ <% end %>
404
+
405
+ <%end%>
406
+
407
+ ```

2

タグをruby on railsにした

2019/02/04 23:40

投稿

knyk
knyk

スコア17

test CHANGED
File without changes
test CHANGED
File without changes

1

初心者マークの追加

2019/02/04 08:17

投稿

knyk
knyk

スコア17

test CHANGED
File without changes
test CHANGED
File without changes