質問するログイン新規登録

質問編集履歴

3

解決時のコードを追記

2019/02/04 23:40

投稿

knyk
knyk

スコア17

title CHANGED
File without changes
body CHANGED
@@ -127,4 +127,78 @@
127
127
  ### 補足情報(FW/ツールのバージョンなど)
128
128
 
129
129
  ruby 2.4.1
130
- rails 5.0.4
130
+ rails 5.0.4
131
+
132
+ ###最終的にどのように実装したか
133
+
134
+ 回答欄でいただいたグローバル変数を使うというやり方で進めました。
135
+
136
+ 途中うまくいかなかったのは,コントローラとjsの間でグローバル変数を受け渡せるrailsのgonというgemを使っていたのですが,ajaxで使うコントローラではどうやら変数の設定ができないようでした。
137
+ (console.logで確認すると,undefinedになってしまっていた)
138
+
139
+ 改めてコードを見直してみると,refresh_part.js.erbではjsのコードとrubyのコードの両方を使うことができるので,そこで変数の受け渡しを実現できることがわかりました。
140
+
141
+ 最終的に自分の目的を果たしたコードは以下のとおりです。
142
+ 実際にはチャットそのものではなく,updateされたものが追加されると意図とは異なる挙動になるので,修正日時ではなくidを基準に新しいものがないかのチェックを行う仕様にしています。
143
+
144
+
145
+ コントローラ(businessnotes_controller.rb)
146
+ ```
147
+ def index
148
+ (略)
149
+ gon.businessnote_id = @businessnotes.order('updated_at DESC').first.id
150
+ end
151
+
152
+
153
+ def refresh_part
154
+ @legalcase = Legalcase.find(params[:legalcase_id])
155
+ @businessnotes = @legalcase.businessnotes.order('created_at DESC')
156
+ @businessnote_refreshed = @businessnotes.order('updated_at DESC').first.id
157
+ respond_to do |format|
158
+ format.js {
159
+ @new_businessnotes = @businessnotes.where('id > ?', params[:new_businessnotes][:id])
160
+ }
161
+ end
162
+ end
163
+ ```
164
+
165
+ index.html.erb
166
+ ```
167
+ <script>
168
+
169
+ $(function(){
170
+ $(function(){
171
+ if($('.update_businessnote')[0]){
172
+ update_businessnote_id = gon.businessnote_id;
173
+ var timer = setInterval(update, 10000);
174
+ //10000ミリ秒ごとにupdateという関数を実行する
175
+ } else {
176
+
177
+ }
178
+ });
179
+ function update(){ //この関数では以下のことを行う
180
+ if($('.update_businessnote')[0]){
181
+ $.ajax({ //ajax通信で以下のことを行う
182
+ url: "businessnotes_controller/refresh_part",
183
+ data: { //railsに引き渡すデータは
184
+ new_businessnotes: { id:update_businessnote_id }
185
+ },
186
+ });
187
+ } else { //ない場合は
188
+
189
+ }
190
+ }
191
+ });
192
+
193
+ </script>
194
+ ```
195
+
196
+ refresh_part.js.erb
197
+ ```
198
+ <% if @new_businessnotes.present? %>
199
+ <% @new_businessnotes.each do |new_businessnote| %>
200
+ update_businessnote_id = "<%=@businessnote_refreshed%>"
201
+ $('.update_businessnote').eq(0).prepend('<%=escape_javascript(render 'update_businessnote',businessnote:new_businessnote) %>');
202
+ <% end %>
203
+ <%end%>
204
+ ```

2

タグをruby on railsにした

2019/02/04 23:40

投稿

knyk
knyk

スコア17

title CHANGED
File without changes
body CHANGED
File without changes

1

初心者マークの追加

2019/02/04 08:17

投稿

knyk
knyk

スコア17

title CHANGED
File without changes
body CHANGED
File without changes